如何与父布局进行交互

时间:2011-09-07 11:16:44

标签: android

实际上我有一个线性布局的父布局..在这个parentLayout我有一个子布局..使用这个子布局我创建了一个按钮数组...所以我的代码是这样的

Xml布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:id="@+id/ParentLayout"
android:layout_width="fill_parent"
android:layout_height="match_parent">

    <ViewFlipper android:id="@+id/flipview" android:layout_width="fill_parent"                                                                                                                      android:layout_height="wrap_content"
        android:layout_marginTop="15dp">  
        <LinearLayout android:id="@+id/liVLayout" android:orientation="vertical" android:layout_width="fill_parent"             
                      android:layout_height="wrap_content">                                                               
        </LinearLayout>    
    </ViewFlipper>   
</LinearLayout>

java代码:

public void onCreate(Bundle savedInstanceState)
{
    //Setup the Activity
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.calendar_frm); 

    LinearLayout layMain = (LinearLayout) findViewById(R.id.parentLayout);
    layMain.setOnTouchListener((OnTouchListener) this);  
}

在子布局上装箱按钮数组的方法..

public boolean initDay()
{
    LinearLayout layoutVertical = (LinearLayout) findViewById(R.id.liVLayout);
    LinearLayout rowLayout = null;

    LayoutParams param = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT, 1);

    //Create Button
    for (int i = 0; i<6; i++)
    {
        rowLayout = new LinearLayout(this);
        rowLayout.setWeightSum(7);
        layoutVertical.addView(rowLayout, param);   

        for(int j=0; j<7; j++)
        {
            m_pBtnDay[i][j] = new Button(this);             
            m_pBtnDay[i][j].setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL);
            rowLayout.addView(m_pBtnDay[i][j], param); 

           // m_pBtnDay[i][j].setOnLongClickListener(this);                         
          //  m_pBtnDay[i][j].setOnClickListener(this);

            m_pBtnDay[i][j].setOnTouchListener(this);

            //save button position
            m_pBtnDay[i][j].setTag(new CalendarForm(i , j));
        }
    }
    return true;
}

我的问题是,childlayout包含一系列覆盖父布局的按钮。

因此,我想为parentlayout调用的任何onListenerEvent都不能在childlayout覆盖的部分上工作。在我的例子中,我在parentLayout上调用onTouchEventListener。

那么会发生什么,是那个没有被childlayout覆盖的部分表现为事件,但子布局覆盖的ParentLayout不会对该事件表现,尽管它是ParentLayout的childLayout。

1 个答案:

答案 0 :(得分:0)

嗯,这是应该的。例如,如果您将一张纸放在桌子上,那么当您触摸纸张时,由于纸张处理触摸(忘记触摸时的压力,表格将不知道是否触摸了纸张)。)

唯一可以做到这一点的方法是确保孩子不应该处理特定区域 - return false。由于子视图不处理事件,因此它将传递给它的底层视图,即父视图。

这是一些让你入门的伪代码。

public boolean onTouch(View v, MotionEvent event) {
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
        if(v == child){
            if((event.getX && event.getY) is within ParentArea){
                //return false so that the parent will get the event.
                return false;                    
            }
            else{
                //handle child event
            }
        }
        else if(v == parent){
            //handle event 
        }
        break;
    }

    return true;
}