2011-07-25 5 views
6

He utilizado FrameLayout en el que he usado dos LinearLayouts. El segundo es inicialmente invisible, pero cuando presiono un botón en el diseño uno, el segundo diseño se hace visible y se superpone al primer diseño. Lo que quiero es que cuando aparezca mi segundo diseño, no se pueda hacer clic (o habilitar) en los elementos del primer diseño. Para esto he intentado setEnabled (falso) y setClickable (falso) pero ambos no están funcionando. No entiendo cuál es el problema.setEnabled(), setClickable() no funciona

Código es el siguiente

TableLayout table; 

EditText edit; 
ScrollView scroll; 

Button btn_save; 
Button btn_layer_save; 
Button btn_cross; 

AlertDialog alert_dialog; 

LinearLayout layout_above; 

int primary_selected; 

RadioButton radio_geo; 
RadioButton radio_alumni; 

String geo = "no" ; 
String alumni = "no" ; 

int color; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    table = (TableLayout) findViewById(R.id.tableLayout1); 
    edit = (EditText) findViewById(R.id.message_select_friends_edit_search); 
    search_geo_name_list = new ArrayList<String>(); 
    search_id_list = new ArrayList<String>(); 

    scroll = (ScrollView) findViewById(R.id.register_scroll_view); 

    btn_cross = (Button) findViewById(R.id.register_cross); 
    btn_save = (Button) findViewById(R.id.register_save); 
    btn_layer_save = (Button) findViewById(R.id.register_layer_save); 

    btn_cross.setOnClickListener(this); 
    btn_save.setOnClickListener(this); 
    btn_layer_save.setOnClickListener(this); 

    layout_above = (LinearLayout) findViewById(R.id.regsiter_layout_layer_above); 

    createTableRows(name_list,id_list); 



} 

void createTableRows(ArrayList<String> list_name , ArrayList<String> list_id) 
{ 
    /*-----R O W S O F T A B L E C R E A T E D D Y N A M I C A L L Y ------*/ 
} 

@Override 
public void onClick(View v) 
{ 
    // TODO Auto-generated method stub 

    switch (v.getId()) 
    { 
    case R.id.register_save: 

      layout_above.setVisibility(LinearLayout.VISIBLE); 
      btn_save.setVisibility(LinearLayout.INVISIBLE); 

     scroll.setEnabled(false); 
     edit.setEnabled(false); 
     edit.setClickable(false); 
     scroll.setClickable(false); 

     break; 

    case R.id.register_cross: 
     Toast.makeText(this, "Cross Cancel", 1000).show(); 
     Intent intent = new Intent(this, TestSave.class); 
     startActivity(intent); 
     finish(); 
     break; 
    case R.id.register_layer_save: 
     selectedInfo(); 
     break; 

    } 

}` 
+0

Así se puede publicar youe código, que ha intentado? –

Respuesta

7

Probar la talla diseño frontal como el tamaño de la disposición del fondo y juego frontal de diseño de color de fondo transparente para el diseño de fondo es parcialmente
visible. Y configure onClickListener en el diseño frontal y en el método onClick no haga nada.

Esta respuesta no es exactamente como usted quiere, pero es una buena alternativa.

creo que sirve

+0

Esto es realmente bueno. Gracias – AB1209

+0

Es malo que no haya un ejemplo de código ( – Morozov

2

Trate de usar setFocusable (Falso); puede ser esto debe ayudar

0

probar por su trabajo con los niños en lugar de la propia disposición

LinearLayout l=(LinearLayout) findViewById(R.layout.layout2); 
       int num=l.getChildCount(); 
       for(int i=0;i<l.getChildAt(0);i++) 
        if(l.getChildAt(i).isClickable()||l.getChildAt(i).isEnabled()) 
          { 
l.getChildAt(i).setClickable(false); 
l.getChildAt(i).setEnabled(false); 
} 
+0

esto no funcionará si hay elementos secundarios anidados para este diseño. Necesitamos configurar fallas en las que se pueda hacer clic para cada niño y su secundario secundario también. He publicado una implementación anidada para la misma, a continuación. – alchemist

0

Usted puede usar recursividad para este y desactivar de forma recursiva propiedad se puede hacer clic para todos los niños-

public static void enableDisableViewGroup(ViewGroup viewGroup, boolean enabled) { 
int childCount = viewGroup.getChildCount(); 
for (int i = 0; i < childCount; i++) { 
    View view = viewGroup.getChildAt(i); 
    view.setEnabled(enabled); 
    if (view instanceof ViewGroup) { 
    enableDisableViewGroup((ViewGroup) view, enabled); 
    } else if (view instanceof ListView) { 
    view.setEnabled(enabled); 
    ListView listView = (ListView) view; 
    int listChildCount = listView.getChildCount(); 
    for (int j = 0; j < listChildCount; j++) { 
     listView.getChildAt(j).setEnabled(enabled); 
    } 
    } 
} 
}