如何将线性布局投射到按钮?

How to cast a Liner Layout to button?

我已经使用以下格式创建了一个使用线性布局的按钮....但是它给出了错误 android.widget.Button 无法转换为 android.widget.LinearLayout...

<LinearLayout
        android:id="@+id/btn_add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/txt_empAddress"
        android:layout_alignRight="@+id/txt_empAddress"
        android:layout_below="@+id/vertical_line2"
        android:layout_marginTop="28dp"
        android:background="@android:drawable/btn_default"
        android:clickable="true"
        android:orientation="horizontal"
        android:gravity="center" >

        <ImageView
            android:id="@+id/img_add"
            android:layout_width="25dp"
            android:layout_height="25dp"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="5dp"
            android:src="@drawable/ic_add" />

        <TextView
            android:id="@+id/txt_add"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_margin="5dp"
            android:text="Add" />
    </LinearLayout>

我正在使用它来将线性布局投射到按钮...

   add = (Button)findViewById(R.id.btn_add);

这是正确的方法吗..还是我犯了一些错误...?

嗯,btn_add 是一个 LinearLayout,为什么你要声明它是一个 Button?它必须像这样声明为 LinearLayout

LinearLayout add = (LinearLayout)findViewById(R.id.btn_add);

如果你想给它添加一个 onClickListener,它会完美无缺地工作:

add.setOnClickListener(new OnClickListener() {

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

        }
    });

不要将其转换为按钮,只需将 OnClickListener 设置为 LinearLayout。

LinearLayout add = (LinearLayout)findViewById(R.id.btn_add);
add.setOnClickListener(listener);

只允许在向上的层次结构中进行上层转换。 Button 永远不会位于 LinearLayout 的层次结构中。所以,你不能。

java.lang.Object
   ↳    android.view.View
       ↳    android.widget.TextView
           ↳    android.widget.Button

没办法做到这一点,它是一个完全不同的组件,按钮是 class 继承自 android.view.View ,但您可以将其用作按钮使用:

LinearLayout add = (LinearLayout) findViewById(R.id.btn_add);
    btn_add.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {

                }
            });

I just want to add image and text in the button that's why i am doing this.....is there any other way to do that..??

您可以使用按钮。文字可以用android:text属性设置,图片可以用android:drawableTopandroid:drawableLeftandroid:drawableBottom[=15=的组合]

  <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:drawableTop="@drawable/ic_add"
    android:textColor="#FFFFFF"
    android:id="@+id/ButtonTest"
    android:text="this is text"></Button>

从您的布局来看 XML 我可以猜到您真正需要的是标题左侧带有图标的按钮。您可以使用标准 drawableLeft 属性来实现此目的。将您的布​​局简化为:

<Button
        android:layout_alignLeft="@+id/txt_empAddress"
        android:layout_alignRight="@+id/txt_empAddress"
        android:layout_below="@+id/vertical_line2"
        android:id="@+id/btn_add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_margin="5dp"
        android:drawableLeft="@drawable/ic_add"
        android:text="Add" />

如果您需要处理 on-click 事件,您可以为任何类型的视图执行此操作,而无需将其强制转换为 ButtonsetOnClickListener(...)View class 中定义 - 所有 Android 小部件的根 class,包括 Button.