Haben Android-Ansichten etwas Ähnliches wie CSS-Klassenselektoren? Etwas wie R.id, aber für mehrere Ansichten verwendbar? Ich möchte einige Gruppen von Ansichten unabhängig von ihrer Position im Layoutbaum ausblenden.Entspricht CSS Klassenselektoren für Android-Ansichten?
Antwort
Ich denke, dass Sie alle Ansichten in Ihrem Layout durchlaufen müssen, auf der Suche nach der Android: ID, die Sie möchten. Sie können View setVisibility() verwenden, um die Sichtbarkeit zu ändern. Sie können auch die Ansicht setTag()/getTag() anstelle von android: id verwenden, um die Ansichten zu markieren, die Sie behandeln möchten. Zum Beispiel verwendet der folgende Code ein Verfahren für allgemeine Zwecke, das Layout zu durchqueren:
// Get the top view in the layout.
final View root = getWindow().getDecorView().findViewById(android.R.id.content);
// Create a "view handler" that will hide a given view.
final ViewHandler setViewGone = new ViewHandler() {
public void process(View v) {
// Log.d("ViewHandler.process", v.getClass().toString());
v.setVisibility(View.GONE);
}
};
// Hide any view in the layout whose Id equals R.id.textView1.
findViewsById(root, R.id.textView1, setViewGone);
/**
* Simple "view handler" interface that we can pass into a Java method.
*/
public interface ViewHandler {
public void process(View v);
}
/**
* Recursively descends the layout hierarchy starting at the specified view. The viewHandler's
* process() method is invoked on any view that matches the specified Id.
*/
public static void findViewsById(View v, int id, ViewHandler viewHandler) {
if (v.getId() == id) {
viewHandler.process(v);
}
if (v instanceof ViewGroup) {
final ViewGroup vg = (ViewGroup) v;
for (int i = 0; i < vg.getChildCount(); i++) {
findViewsById(vg.getChildAt(i), id, viewHandler);
}
}
}
Sie gleichen Tag für alle solche Ansichten einstellen und Sie können alle Ansichten dieses Tag mit einer einfachen Funktion wie diese, die dann erhalten:
private static ArrayList<View> getViewsByTag(ViewGroup root, String tag){
ArrayList<View> views = new ArrayList<View>();
final int childCount = root.getChildCount();
for (int i = 0; i < childCount; i++) {
final View child = root.getChildAt(i);
if (child instanceof ViewGroup) {
views.addAll(getViewsByTag((ViewGroup) child, tag));
}
final Object tagObj = child.getTag();
if (tagObj != null && tagObj.equals(tag)) {
views.add(child);
}
}
return views;
}
Wie in Shlomi Schwartz answer erklärt. Offensichtlich ist dies nicht so nützlich wie CSS Klassen. Aber das könnte ein wenig nützlich sein im Vergleich zum Schreiben von Code, um Ihre Ansichten immer wieder zu wiederholen.
- 1. CSS-ID und Klassenselektoren
- 2. CSS-Klassenselektoren überschreiben ohne! Wichtig
- 3. Nightwatch kann Element über CSS-ID oder Klassenselektoren nicht finden
- 4. Kombinieren Klassenselektoren in Kompass Sprite?
- 5. bower_concat entspricht für NPM
- 6. PDFLib entspricht der Zeilenhöhe in css
- 7. Wordpress: Hinzufügen von Klassenselektoren zu the_tags(); Ausgabe
- 8. CodeKit für Mac - Windows entspricht?
- 9. "Friends" entspricht für Java?
- 10. "ResizeEnd" entspricht für usercontrols
- 11. Entspricht cudaGetErrorString für cuBLAS?
- 12. Entspricht „Abc.class.getName()“ für Felder
- 13. Entspricht cURL für Ruby?
- 14. Code entspricht für Html.EditorFor()
- 15. Entspricht MappedBytesBuffer für .NET?
- 16. Dreamweaver entspricht für Linux
- 17. FileMakerPro entspricht für Linux?
- 18. VisualVM entspricht für Python
- 19. xkill entspricht für Windows
- 20. Entspricht super() für functools.singledispatch
- 21. RVM entspricht für PHP?
- 22. NetDataContractSerializer entspricht für Silverlight?
- 23. Passport.js entspricht für Python?
- 24. Autotest entspricht für PHP?
- 25. WindowBuilder entspricht für IntelliJ?
- 26. AngularJS entspricht für hasAttribute()?
- 27. Ionic Framework entspricht für Knockout?
- 28. Scala Nil entspricht für Set
- 29. Scikit-lernen entspricht für C++?
- 30. WKWebView entspricht für UIWebView's scalesPageToFit