具有自定义 XML 布局的按钮

Posted

技术标签:

【中文标题】具有自定义 XML 布局的按钮【英文标题】:Button with custom XML layout 【发布时间】:2011-01-20 23:56:27 【问题描述】:

是否可以创建具有自定义 xml 布局的按钮?

我有这个布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_
  android:layout_
  android:padding="1dp"
  android:background="#7e7e7e">

 <RelativeLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_
   android:layout_
   android:padding="10dp"
   android:background="#f9f9f9">

 <TextView
  android:id="@+id/TextView01" 
  android:layout_ 
  android:layout_
  android:layout_alignParentLeft="true"
  android:text="ButtText"
  android:textColor="#000000">
 </TextView>

 <ImageView 
  android:id="@+id/ImageView01" 
  android:layout_ 
  android:layout_ 
  android:background="@drawable/arrow"
  android:layout_alignParentRight="true">
 </ImageView>

 </RelativeLayout>
</LinearLayout>

现在我想在按钮上使用它。有人知道我该怎么做吗? 我在想我是否有扩展 Button 的 Button.java 文件。然后 setView(R.layout.mylayout.xml); ...但这很容易,而且显然不起作用

问候马丁

【问题讨论】:

【参考方案1】:

我最近一直在处理这个问题,因为我想在一个按钮中放置两个文本视图。你必须选择:

    扩展 Button 类并在您的布局中使用它

    使用一个按钮的布局并拖动到您需要的所有内容中,并通过向其添加此参数使其可点击:

    android:clickable="true"
    

之后,您可以通过定义来修改布局的外观

android:background="@drawable/my_background"

赋予它“按钮式”的外观和行为

/res/drawable/mi_background.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android">   
    <item android:state_focused="true" android:drawable="@color/black"/> 
    <item android:state_pressed="true" android:state_enabled="false" android:drawable="@color/black" />
    <item android:drawable="@color/white"/> 
 </selector>

【讨论】:

【参考方案2】:

您不能在Button 的表面上使用该布局。不过,您可以使用 Button 上的 android:drawableRight 属性获得类似的外观。

【讨论】:

一切都那么简单。谢谢你今天的信息! :)【参考方案3】:

您可以使用 RelativeLayout 将自定义按钮视图简单地覆盖在真实 Button 之上,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_>

    <Button
        android:id="@+id/button1"
        android:layout_
        android:layout_ />

    <!-- Your custom button layout -->
    <LinearLayout
        android:layout_
        android:layout_
        android:background="#7e7e7e"
        android:padding="1dp">

        <RelativeLayout
            android:layout_
            android:layout_
            android:background="#f9f9f9"
            android:padding="10dp">

            <TextView
                android:id="@+id/TextView01"
                android:layout_
                android:layout_
                android:layout_alignParentLeft="true"
                android:text="ButtText"
                android:textColor="#000000" />

            <ImageView
                android:id="@+id/ImageView01"
                android:layout_
                android:layout_
                android:layout_alignParentRight="true"
                android:background="@drawable/jobs_menu" />

        </RelativeLayout>
    </LinearLayout>
</RelativeLayout>

【讨论】:

以上是关于具有自定义 XML 布局的按钮的主要内容,如果未能解决你的问题,请参考以下文章

片段中的按钮自定义视图

在 style.xml 中定义时,自定义按钮的“android:gravity”不适用

具有自定义颜色属性的 TextView 不在布局预览中呈现

从 XML 布局中的自定义视图中删除包前缀

Android自定义软键盘

Android 自定义单选列表