2016-11-02 7 views
0

これは、今、私は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); 

この方法の結果ということですが、以下のように、GradientDrawableのストローク幅について混乱しているのstackoverflowで質問をする私の最初の時間ですTextViewのストローク幅は、使用XMLよりも薄く、そして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);` 
を以下のように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> 

を以下のように定義されます

ストローク幅を設定するこれらの2種類の方法は、視覚的に異なる画像につながりました。前者のストローク幅は後者よりも薄いです。誰かがこの問題を解決するのに役立ちます。

+0

最初のコードスニペットから 'strokeWidth'をどのように定義しますか?どのデバイスをテストしていますか? –

+0

あなたがプログラムでdpをpxに変換するのを忘れないでください。 'TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP、strokeWidth、getResources()。getDisplayMetrics());' –

+0

strokeWidthはXMLで定義された幅と同じです.1pxです。すべての携帯電話でこの現象が表示されます。 – Emily

答えて

1

applyDemensionsメソッドをMath.round()にラップします。

Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, strokeWidth, getResources().getDisplayMetrics())); 
関連する問題