버튼에 이미지 (배경으로)를 가지고 런타임에 발생하는 상황에 따라 이미지 위 / 위에 일부 텍스트를 동적으로 추가하려고합니다.
내가 사용 ImageButton
하면 텍스트를 추가 할 수조차 없습니다. 내가 사용 Button
하면 텍스트를 추가 할 수 있지만 여기에android:drawableBottom
정의 된 것과 유사한 XML 속성을 가진 이미지 만 정의 할 수 있습니다 .
그러나 이러한 속성은 텍스트와 이미지를 x 및 y 차원으로 만 결합하므로 텍스트 주위에 이미지를 그릴 수 있지만 텍스트 아래 / 아래에는 표시 할 수 없습니다 (z- 축은 디스플레이에서 나오는 것으로 정의 됨).
이 작업을 수행하는 방법에 대한 제안 사항이 있습니까? 한 가지 아이디어는 -method를 확장 Button
하거나 ImageButton
재정의하는 draw()
것입니다. 그러나 내 현재의 지식 수준으로 실제로이 작업을 수행하는 방법을 알지 못합니다 (2D 렌더링). 더 많은 경험을 가진 사람이 해결책이나 적어도 시작해야 할 지침을 알고 있습니까?
답변
당신은 호출 할 수 있습니다 setBackground()
A의 Button
버튼의 배경을 설정할 수 있습니다.
모든 텍스트가 배경 위에 나타납니다.
xml에서 비슷한 것을 찾고 있다면 :
android:background
동일한 방식으로 작동하는 attribute가 있습니다.
답변
배경, 아이콘 이미지 및 텍스트 Button
를 다른 파일 에서 하나만Button
넣으려는 사용자의 경우 : 배경, drawableTop / Bottom / Rigth / Left 및 패딩 속성에 설정하십시오.
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/home_btn_test"
android:drawableTop="@drawable/home_icon_test"
android:textColor="#FFFFFF"
android:id="@+id/ButtonTest"
android:paddingTop="32sp"
android:drawablePadding="-15sp"
android:text="this is text"></Button>
보다 정교한 배열을 위해 사용 RelativeLayout
하거나 다른 레이아웃을 사용하여 클릭 할 수 있습니다.
튜토리얼 : 두 경우 모두를 다루는 훌륭한 튜토리얼 : http://izvornikod.com/Blog/tabid/82/EntryId/8/Creating-Android-button-with-image-and-text-using-relative-layout.aspx
답변
이 문제에 대한 훨씬 더 나은 해결책이 있습니다.
그냥 정상을 취하고 및 속성을 Button
사용하십시오 .drawableLeft
gravity
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/my_btn_icon"
android:gravity="left|center_vertical" />
이 방법을 사용하면 디스플레이 버튼의 왼쪽에있는 아이콘과 아이콘의 오른쪽 사이트에서 텍스트 버튼을 얻을 수직 중심을 .
답변
<Button
android:layout_width="0dp"
android:layout_weight="1"
android:background="@drawable/home_button"
android:drawableLeft="@android:drawable/ic_menu_edit"
android:drawablePadding="6dp"
android:gravity="left|center"
android:height="60dp"
android:padding="6dp"
android:text="AndroidDhina"
android:textColor="#000"
android:textStyle="bold" />
답변
LinearLayout을 사용하고 Button
설정 한 척 background
하고 클릭 가능한 것이 핵심입니다.
<LinearLayout
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:drawable/btn_default"
android:clickable="true"
android:orientation="horizontal" >
<ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="5dp"
android:src="@drawable/image" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_margin="5dp"
android:text="Do stuff" />
</LinearLayout>
답변
그냥 교체
android:background="@drawable/icon"
와
android:background="@android:color/transparent"
android:drawableTop="@drawable/[your background image here]"
이건 꽤 좋은 트릭입니다 ..;)
답변
나는 여기에 언급 된 것과 다른 접근법을 취했으며 실제로 잘 작동하고 있으므로 공유하고 싶었습니다.
스타일을 사용하여 왼쪽에 이미지가 있고 가운데 오른쪽에 텍스트가있는 사용자 정의 버튼을 만듭니다. 아래의 4 가지 “쉬운 단계”를 따르십시오.
I. /YOUR_OWN_PATH/android-sdk-mac_x86/tools/./draw9patch에있는 최소 3 개의 다른 PNG 파일과 도구를 사용하여 9 개의 패치를 만듭니다. 이 후 당신은해야합니다 :
button_normal.9.png, button_focused.9.png 및 button_pressed.9.png
그런 다음 24×24 PNG 아이콘을 다운로드하거나 만듭니다.
ic_your_icon.png
Android 프로젝트의 drawable / 폴더에 모두 저장하십시오.
II. 프로젝트에서 drawable / 폴더 아래 button_selector.xml이라는 XML 파일을 만듭니다. 상태는 다음과 같아야합니다.
<item android:state_pressed="true" android:drawable="@drawable/button_pressed" />
<item android:state_focused="true" android:drawable="@drawable/button_focused" />
<item android:drawable="@drawable/button_normal" />
III. values / 폴더로 이동하여 styles.xml 파일을 열거 나 작성하고 다음 XML 코드를 작성하십시오.
<style name="ButtonNormalText" parent="@android:style/Widget.Button">
<item name="android:textColor" >@color/black</item>
<item name="android:textSize" >12dip</item>
<item name="android:textStyle" >bold</item>
<item name="android:height" >44dip</item>
<item name="android:background" >@drawable/button_selector</item>
<item name="android:focusable" >true</item>
<item name="android:clickable" >true</item>
</style>
<style name="ButtonNormalTextWithIcon" parent="ButtonNormalText">
<item name="android:drawableLeft" >@drawable/ic_your_icon</item>
</style>
ButtonNormalTextWithIcon은 ButtonNormalText ( “부모 스타일”)를 확장하므로 “자식”입니다.
ButtonNormalTextWithIcon 스타일에서 drawableLeft를 drawableRight, drawableTop 또는 drawableBottom으로 변경하면 아이콘을 텍스트와 관련하여 다른 위치에 배치 할 수 있습니다.
IV. UI 용 XML이있는 레이아웃 / 폴더로 이동하고 스타일을 적용하려는 버튼으로 이동하여 다음과 같이 만듭니다.
<Button android:id="@+id/buttonSubmit"
android:text="@string/button_submit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@style/ButtonNormalTextWithIcon" ></Button>
그리고 … voilà! 왼쪽에 이미지가있는 버튼이 있습니다.
저에게는 이것이 더 좋은 방법입니다! 이 방법을 사용하면 표시하려는 아이콘과 별도로 버튼의 텍스트 크기를 관리하고 스타일을 사용하는 Android UI 지침을 존중하는 다른 아이콘이있는 여러 버튼에 대해 동일한 배경 드로어 블을 사용할 수 있습니다.
또한 앱의 테마를 생성하고 “부모 스타일”을 추가하여 모든 버튼이 동일하게 보이도록하고 필요한 경우에만 아이콘으로 “자식”을 적용 할 수 있습니다.