2013-07-19 11 views

Antwort

4

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); 
     } 
    } 
} 
3

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.