如何将线性布局转换为按钮?

时间:2015-01-14 08:50:52

标签: android android-layout

我使用以下格式创建一个使用线性布局的按钮....但它给出了错误,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);

这是正确的做法。或者我犯了一些错误......?

6 个答案:

答案 0 :(得分:3)

  

我只想在按钮中添加图像和文字,这就是我为什么这么做的原因   这.....还有其他办法吗?? ??

您可以使用按钮。可以使用android:text属性设置文字,对于图片,您可以使用android:drawableTopandroid:drawableLeftandroid:drawableBottom android:drawableRight

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

答案 1 :(得分:1)

好吧,btn_addLinearLayout,为什么要将其声明为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

        }
    });

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

只允许向上施放层次结构。 Button永远不会位于LinearLayout的层次结构中。所以,你不能。

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

答案 4 :(得分:1)

无法做到这一点,它是一个完全不同的组件,按钮是从 android.view.View 继承的类,但你可以使用它作为按钮使用:

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

                }
            });

答案 5 :(得分:1)

从你的布局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" />

如果您需要处理点击事件,您可以针对任何类型的视图执行此操作,而无需将其转换为ButtonView类中定义了setOnClickListener(...) - 所有Android小部件的根类,包括Button