2013-07-19 5 views

Odpowiedz

4

Myślę, że będziesz musiał przejrzeć wszystkie widoki w swoim układzie, szukając androida: id, którego chcesz. Następnie możesz użyć opcji View setVisibility(), aby zmienić widoczność. Możesz również użyć widoku setTagTag()/getTag() zamiast android: id, aby oznaczyć widoki, które chcesz obsłużyć. Na przykład, poniższy kod wykorzystuje metodę ogólnego przeznaczenia przemierzać układ:

// 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

Można ustawić sam znacznik do wszystkich takich poglądów, a następnie można uzyskać wszystkie widoki Mając to tag z prostej funkcji takich jak to:

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

Jak wyjaśniono w Shlomi Schwartz answer. Oczywiście nie jest to tak użyteczne, jak klasy css. Ale może to być trochę przydatne w porównaniu do pisania kodu, aby wielokrotnie powtarzać swoje poglądy.