Es ging mir auf die Nerven, ich gebe es zu. Ich mag die TextViews
im Code wie TextViews
aussehen, und selbst wenn ich eine WebView
als Mittel zum Erreichen der Text-Align: gerechtfertigte Formatierung verwenden, möchte ich es nicht so betrachten.
Ich habe eine benutzerdefinierte Ansicht (hässlich, wahrscheinlich schlecht) erstellt, die die Methoden, die ich häufig verwende, aus der TextView
implementiert und den Inhalt der WebView ändert, um diese Änderungen widerzuspiegeln. Ob es für jemand anderen oder eine potenzielle Gefahr nützlich ist, weiß ich wirklich nicht, für mich funktioniert es, ich habe es in mehreren Projekten verwendet und habe keine Probleme festgestellt. Die einzige kleine Unannehmlichkeit ist, dass ich davon ausgehe, dass es eine größere Maut ist, aber keine Sorge, wenn es nur ein oder zwei ist (korrigiere mich, wenn ich falsch liege).
Das Ergebnis ist folgendes:
und der Code es programmatisch für die Einstellung, da dies so einfach ist:
JustifiedTextView J = new JustifiedTextView();
J.setText("insert your text here");
Natürlich wäre es dumm, es zu verlassen, wie Also habe ich auch die Methoden hinzugefügt, um die Schriftgröße und die Schriftfarbe zu ändern, für die ich hauptsächlich TextViews verwende. Bedeutung ich etwas tun kann:
JustifiedTextView J = new JustifiedTextView();
J.setText("insert your text here");
J.setTextColor(Color.RED);
J.setTextSize(30);
und erhalten das folgende Ergebnis (Bilder werden abgeschnitten):
Aber dies uns nicht zu zeigen, wie es aussieht, ist es zu teile, wie du es gemacht hast!
Ich weiß, ich weiß. Hier ist der vollständige Code. Es behandelt auch Probleme beim Einstellen von transparentem Hintergrund und Laden von UTF-8-Strings in die Ansicht. Siehe die Kommentare in reloadData() für Details.
public class JustifiedTextView extends WebView{
private String core = "<html><body style='text-align:justify;color:rgba(%s);font-size:%dpx;margin: 0px 0px 0px 0px;'>%s</body></html>";
private String textColor = "0,0,0,255";
private String text = "";
private int textSize = 12;
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;
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), "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();
}
}
Wenn wir webview Text nehmen wenig Zeit anzuzeigen verwenden. In meinem Fall wird zuerst das Hintergrundbild und nach 2 Sekunden die Textanzeige angezeigt. Wie von diesem Problem zu überwinden? –
und ist es möglich, Schriftart zur Textansicht zu setzen? Danke – Igor
Dies ist eine gute Lösung für Ansichten, die keine Speicher verwenden müssen, zum Beispiel seine nicht gute Idee mit einem Webview (this) in Listview es wird eine Menge Speicher verbrauchen und Ihre App wird eine Antwort langsamer als mit Textview. – superUser