2011-07-25 81 views
6

我已經使用了FrameLayout,其中我使用了兩個LinearLayout。第二個是最初不可見的,但是當我在佈局一上按下按鈕時,第二個佈局變得可見並且與第一個佈局重疊。我想要的是當我的第二個佈局出現時,第一個佈局的元素不應該是可點擊的(或啓用)。 爲此,我嘗試了setEnabled(false)和setClickable(false),但這兩個都不起作用我沒有得到什麼問題。setEnabled(),setClickable()不起作用

代碼如下

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

所以,你可以發佈YOUE代碼,你試過嗎? –

回答

7

採取正面佈局的大小,背景佈置的大小,並設置前 佈局的背景色透明的工作,所以背景佈置是部分
可見。 並將onClickListener設置爲正面佈局,並在onClick方法中不執行任何操作。

這個答案並不完全如你所願,但它是一個很好的選擇。

希望它可以幫助

+0

這真的很好。謝謝 – AB1209

+0

沒有代碼示例很糟糕( – Morozov

2

使用setFocusable(假)嘗試;可能這會幫助你

0

試圖通過與孩子,而不是佈局本身

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

如果此佈局有嵌套子元素,這將不起作用。我們需要爲每個孩子及其子孩設置可點擊的錯誤。 我已經發布了一個相同的嵌套實現,下面。 – alchemist

0

您可以使用遞歸,這和遞歸禁用點擊財產所有CHILDREN-

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