Кнопка с пользовательским макетом XML - PullRequest
8 голосов
/ 25 февраля 2010

Можно ли создать кнопку с пользовательским макетом XML?

У меня есть этот макет:

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

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

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

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

 </RelativeLayout>
</LinearLayout>

Теперь я хочу использовать это для кнопки. Кто-нибудь знает, как я могу это сделать?
Я думал, если бы у меня был файл Button.java, который расширил бы Button. И затем setView (R.layout.mylayout.xml); ... но это было легко, и это явно не работает

С уважением, Мартин

Ответы [ 3 ]

22 голосов
/ 29 ноября 2011

Я имел дело с этим недавно, потому что я хотел поместить два текстовых представления в кнопку. Вы должны выбрать:

  1. Расширьте класс Button и используйте его в макете
  2. Используйте макет, вставленный в кнопку, и перетащите внутрь все, что вам нужно, и сделайте его интерактивным, добавив в него этот параметр:

    android:clickable="true"
    

После этого вы можете изменить внешний вид вашего макета, определив

android:background="@drawable/my_background"

чтобы придать ему "пуговичное" лицо и поведение

/ RES / рисуем / 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>
7 голосов
/ 25 февраля 2010

Вы не можете буквально использовать этот макет на лице Button. Вы можете добиться похожего вида, используя свойство android:drawableRight для Button.

0 голосов
/ 19 октября 2017

Вы можете использовать RelativeLayout, чтобы просто наложить свой пользовательский вид кнопки поверх реальной кнопки, как это:

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

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

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

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#f9f9f9"
            android:padding="10dp">

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

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

        </RelativeLayout>
    </LinearLayout>
</RelativeLayout>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...