10

カスタムボタンに背景画像を設定しています。アプリのスクリーンショットを作成し、ボタンの幅と高さに「wrap_content」を使用すると、ボタンが引き伸ばされると述べました。dpでサイズを修正すると、見栄えが良くなります(たとえば、mdpiフォルダーには48x48pxのアイコンがあるので、幅と高さに48dpを入れます)。理由を教えていただけますか?

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/definition_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="5dp"
android:layout_alignParentTop="true" >

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/buttons"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="5dp" >

    <Button
        android:id="@+id/addToFavorites"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:background="@drawable/favorites_button" />

    <Button
        android:id="@+id/fontup"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:background="@drawable/fontup_button" />

    <Button
        android:id="@+id/fontdown"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:background="@drawable/fontdown_button" />

    <Button
        android:id="@+id/comment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:background="@drawable/comment_button" />

    <Button
        android:id="@+id/speak"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:background="@drawable/speak_button" />
    </LinearLayout>

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"
        android:layout_below="@id/buttons">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/image_frame"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <WebView
        android:id="@+id/webView1"
        android:layout_below="@id/image_frame"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    </LinearLayout>
    </ScrollView>

    </RelativeLayout>

上記のコードは私のXMLファイルを示しています。このリンクをチェックして、私の問題のスクリーンショットを表示できます: https ://www.dropbox.com/s/phnxt5p335ltqef/buttons_icon_altered.png

4

3 に答える 3

21

minWidthとminHeightを0dpに設定すると、ボタンの背景の伸びを回避できます。

<Button
    android:id="@+id/addToFavorites"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:minWidth="0dp"
    android:minHeight="0dp"
    android:layout_margin="5dp"
    android:background="@drawable/favorites_button" />
于 2014-05-20T12:17:13.887 に答える
8

とても簡単です。

  • Buttonの代わりにImageButtonを使用する
  • 背景属性をnullに設定します
  • src属性を設定します
  • scaleType属性をcenterInsideに設定します

実例:

<ImageButton
android:id="@+id/my_awesome_button"
android:scaleType="centerInside"
android:background="@null"
android:gravity="center"
android:layout_height="wrap_content" 
android:layout_width="wrap_content"
android:src="@drawable/my_awesome_drawable"/>

注: 「 wrap_content 」の代わりにdp値を 使用することもできます。

お役に立てば幸いです。

于 2015-07-30T09:37:41.807 に答える
5

「wrap_content」は、Androidが囲んでいるレイアウトに合うように画像を引き伸ばすことを意味するため、引き伸ばされたように見えます。

あなたの場合、線形レイアウトのボタンは、レイアウト内で可能な限り多くのスペースを取ります。したがって、ボタンの高さと幅を設定しない限り、ボタンは線形レイアウトが占めるスペースを埋めるために引き伸ばされ、その結果、ボタンと一緒に背景画像も引き伸ばされます。

ただし、ボタンのサイズを48dpに設定すると、画像のサイズも48pxであるため、画像を引き伸ばす必要がなくなり、見栄えが良くなります。

レイアウトの詳細については、優れた公式開発者ドキュメントをご覧ください: https ://developer.android.com/guide/topics/ui/declaring-layout.html

複数のAndroid画面サイズと解像度のレイアウトとアセットを管理する方法については、こちらをご覧ください。

https://developer.android.com/guide/practices/screens_support.html

于 2012-10-09T07:12:01.620 に答える