2015-12-22 118 views
5

我想在TextView中使用對齊的文本格式,所以我創建了class JustifiedTextView extends WebView。我不能設置外部Typeface更改對齊字體的對齊TextView

我在我的代碼中嘗試了setTypeface,它沒有給出任何錯誤,但Typeface沒有在TextView中設置。

我的課程中有關Typeface的任何更改?

.XML

<com.example.Model.JustifiedTextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:id="@id/article_decription" /> 

JustifiedTextView.Java

public class JustifiedTextView extends WebView { 

    private String core = "<html><body style='text-align:justify;color:rgba(%s);font-size:%dpx;margin: 10px 10px 10px 10px;'>%s</body></html>"; 
    private String textColor = "0,0,0,255"; 
    private String text = ""; 

    String fontBody = "fonts/AvenirLTStd-Book.otf"; 

    Typeface typeFace = Typeface.createFromAsset(getContext().getAssets(), fontBody); 
    private int textSize = 18; 
    private int backgroundColor = Color.TRANSPARENT; 
    public JustifiedTextView(Context context, AttributeSet attrs){ 
     super(context, attrs); 
     this.setWebChromeClient(new WebChromeClient() { 
     }); 
    } 

    public void setText(String s) { 
     this.text = s; 
     // this.setPadding(10, 10, 10, 10); 
     reloadData(); 
    } 

    @SuppressLint("NewApi") 
    private void reloadData() { 
     // loadData(...) has a bug showing utf-8 correctly. That's why we need 
     // to set it first. 
     // this.getSettings().setDefaultTextEncodingName("utf-8"); 

     this.loadData(String.format(core, textColor, textSize, text, typeFace), "text/html", "utf-8"); 
     // set WebView's background color *after* data was loaded. 
     super.setBackgroundColor(backgroundColor); 
     // Hardware rendering breaks background color to work as expected. 
     // Need to use software renderer in that case. 
     if (android.os.Build.VERSION.SDK_INT >= 11) 
      this.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null); 
    } 

    public void setTextColor(int hex) { 
     String h = Integer.toHexString(hex); 
     int a = Integer.parseInt(h.substring(0, 2), 16); 
     int r = Integer.parseInt(h.substring(2, 4), 16); 
     int g = Integer.parseInt(h.substring(4, 6), 16); 
     int b = Integer.parseInt(h.substring(6, 8), 16); 
     textColor = String.format("%d,%d,%d,%d", r, g, b, a); 
     reloadData(); 
    } 

    public void setBackgroundColor(int hex) { 
     backgroundColor = hex; 
     reloadData(); 
    } 

    public void setTextSize(int textSize) { 
     this.textSize = textSize; 
     reloadData(); 
    } 

    public void setTypeFace(Typeface typeFace){ 
     this.typeFace=typeFace; 
     reloadData(); 
    } 
} 

MainActivity.Java

Typeface typeFontBody = Typeface.createFromAsset(getAssets(), fontBody); 
JustifiedTextView Description; 
Description = (JustifiedTextView)itemView.findViewById(R.id.article_decription); 
Description.setTypeFace(typeFontBody); 
Description.setText("Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book"); 
+1

有一個圖書館理由textview使用它可能可以幫助 我沒有林k,但這個gradle線爲該庫 '編譯'com.github.bluejamesbond:textjustify-android:2.1.1'' –

+0

@VivekMishra是否正確設置了'fonts'目錄 –

+1

是的,我的代碼與該庫完美匹配 –

回答

4

Android的文本全Jusiftication /包裝/對齊/斷字 - V2.0 https://github.com/bluejamesbond/TextJustify-Android

build.grade

dependencies { 

    compile 'com.github.bluejamesbond:textjustify-android:2.1.1' 
} 

.XML

<com.bluejamesbond.text.DocumentView xmlns:ext="http://schemas.android.com/apk/res-auto" 
             android:layout_width="fill_parent" 
             android:layout_height="fill_parent" 
             ext:documentView_antialias="true" 
             ext:documentView_cacheConfig="auto_quality" 
             ext:documentView_hyphen="-" 
             ext:documentView_insetPadding="10dp" 
             ext:documentView_insetPaddingBottom="10dp" 
             ext:documentView_insetPaddingLeft="10dp" 
             ext:documentView_insetPaddingRight="10dp" 
             ext:documentView_insetPaddingTop="10dp" 
             ext:documentView_lineHeightMultiplier="2.0" 
             ext:documentView_maxLines="100" 
             ext:documentView_offsetX="10dp" 
             ext:documentView_offsetY="10dp" 
             ext:documentView_progressBar="@id/progressBarXml" 
             ext:documentView_reverse="false" 
             ext:documentView_text="@string/xml_test_data" 
             ext:documentView_textAlignment="justified" 
             ext:documentView_textColor="@android:color/white" 
             ext:documentView_textFormat="plain" 
             ext:documentView_textSize="12sp" 
             ext:documentView_textStyle="bold|strikeThru|underline" 
             ext:documentView_textSubPixel="true" 
             ext:documentView_textTypefacePath="fonts/helvetica.ttf" 
             ext:documentView_wordSpacingMultiplier="5.0"/> 

MainActivity.Java

DocumentView Description; 
Description = (DocumentView) itemView.findViewById(R.id.article_decription); 
Description.setText("TEXT"); 
+0

那麼最後解決thayu k baki che? – Piyush

+1

@PiyushGupta是的!完成!! –