2016-11-02 4 views
0

Это мой первый раз, чтобы задать вопрос в StackOverflow, теперь я запутался о ширине хода GradientDrawable, в когда я использую код для установки TextView Backgroud следующегоGradientDrawable в setStroke

GradientDrawable gd = new GradientDrawable(); 
    gd.setShape(GradientDrawable.RECTANGLE); 
    gd.setColor(fillColor); 
    gd.setCornerRadius(roundRadius); 
    int strokeColor = Color.parseColor(getColor(Subject.list.get(0).color)); 
      gd.setStroke(strokeWidth, strokeColor); 
      tvSpecial1Title.setText(Subject.list.get(0).title); 
      tvSpecial1Title.setTextColor(strokeColor); 
      tvSpecial1Title.setBackgroundDrawable(gd); 
      tvSpecial1Intro.setText(Subject.list.get(0).intro); 

результат этого метода является то, что ширина ход TextView тоньше, чем использование XML и XML-определяется следующим образом

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="#00ffffff" /> 
    <stroke 
     android:width="0.5dp" 
     android:color="#ff8200" /> 
    <corners android:radius="2dp" /> 
    <padding 
     android:bottom="1dp" 
     android:left="3dp" 
     android:right="3dp" 
     android:top="1dp" /> 


</shape> 

с использованием XML следующим образом

TextView t = new TextView(getContext()); 
t.setBackgroundResource(R.drawable.plugin_movie_item_icon_orange_selector); 
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 
      ViewGroup.LayoutParams.WRAP_CONTENT); 
    params.rightMargin = CommonUtils.dip2px(5); 
    t.setLayoutParams(params); 
    t.setGravity(Gravity.CENTER); 
    t.setIncludeFontPadding(false); 
    t.setSingleLine(); 
    t.setTextColor(Color.parseColor("#ff8200")); 
    t.setTextSize(10);` 

эти два вида метода для установки ширины штриха привели к различным изображениям визуально, первая ширина хода стала тоньше последней, есть ли кто-нибудь, кто поможет решить эту проблему, более сердечно благодаря вам.

+0

Как вы определяете 'strokeWidth' от первого фрагмента кода? Какое устройство вы тестируете? –

+0

Когда вы используете его программно, не забудьте преобразовать dp в px. 'TypedValue.applyDimension (TypedValue.COMPLEX_UNIT_DIP, strokeWidth, getResources(). GetDisplayMetrics());' –

+0

. StrokeWidth тот же, что и ширина, определенная в XML, которая является 1px. Все мобильные телефоны показывают это явление – Emily

ответ

1

Оберните свой метод applyDemensions внутри a Math.round().

Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, strokeWidth, getResources().getDisplayMetrics()));