Androidでボタンの周りのパディングを削除するにはどうすればよいですか?


184

私のAndroidアプリには、次のレイアウトがあります。

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

    <fragment
         android:id="@+id/map"
         android:layout_width="match_parent"
         android:layout_height="0dp" 
         android:layout_weight="1" 
         class="com.google.android.gms.maps.SupportMapFragment"/>

    <Button
        android:id="@+id/button_back"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:onClick="CloseActivity"
        android:padding="0dp"
        android:text="@+string/back" />

</LinearLayout>

プレビューと電話では、次のようになります。

下の領域のボタンを見るとわかるように、そこにはいくつかのパディングがあります。

どうすればそれを取り除くことができ、ボタンが下部の領域を完全に埋めることができますか?


6
DATerreの回答は2年間正解です。そのようにマークできますか?
JohnnyLambada 2016

1
この質問を編集して、より良いタイトルにする必要があります。それは実際には質問に答えませんが、Google検索の最初の結果になりました。
SOFe

回答:


436

私にとって、問題はいくつかのAndroidテーマのminHeightとminWidthであることがわかりました。

Button要素に以下を追加します。

<Button android:minHeight="0dp" android:minWidth="0dp" ...

またはあなたのボタンのスタイルで:

<item name="android:minHeight">0dp</item>
<item name="android:minWidth">0dp</item>

5
私が奇妙なパディング動作ではなく、minHeightを処理していることに気づくまでしばらくかかりました。
Pijusn 14

7
この答えが実際に元の質問に実際に答えるとは思いません。しかし、をButton設定しandroid:background="@null"た後でも、なぜこれほど多くのスペースを占有しているのか理解できなかったので、この問題に遭遇してうれしく思います。Buttonのデフォルトスタイルが責任を負うという事実は、非常に優れたヒントです。
Tony Chan

どちらか一方だけでなく、android:minHeight = "0dp" android:minWidth = "0dp"の両方を使用することが重要です。
Ricardo

これにより、Android Nougatのボタンから丸みを帯びた角と波及効果が取り除かれますが、この動作の原因は何ですか?
rraallvv 2017

この回答は、テキストにautoSizeオプションが設定されたボタンを含むGridLayoutの問題を解決しました。見つけるのに長い時間がかかった簡単な答え...
Mike Hanafey

71

私のソリューションは、insetTopプロパティとinsetBottomプロパティを0に設定しました。

<android.support.design.button.MaterialButton
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:insetTop="0dp"
        android:insetBottom="0dp"
        android:text="@string/view_video"
        android:textColor="@color/white"/>

1
これは私にとっても問題を解決したものです!ありがとう!
SPM

46

これはパディングではなく、背景のドローアブルのボタンの周りの影です。あなた自身の背景を作成し、それが消えます。


6
やった。消えませんでした。
ハサン、2014

そのサイズはどのように測定できますか?
Iman Akbari 2017

これが@Behrです。背景をボタンの色に変更します
Ramon

背景画像に透明なパディングがあることに気づきました
Fruit

22

回避策は-ve、次のようなマージンの値を使用することです。

<Button
    android:id="@+id/button_back"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:onClick="CloseActivity"
    android:padding="0dp"
    android:layout_marginLeft="-5dip"
    android:layout_marginRight="-5dip"
    android:layout_marginTop="-5dip"
    android:layout_marginBottom="-5dip"
    android:text="@string/back" />

それはその空間を消滅させます。つまり、適切なdip値を選択して、それをなくすことができます。それは私のために働いた。それがあなたのために働くことを願っています。


4
このソリューションの使用には注意が必要です。これは、負のマージンを使用してボタンの背景(ボーダー+シャドウ)を非表示にするだけです。スタイルの変更とは何ですか?border + shadowは5 dp以上かかりますか?安全のために、Delyan / Casey Murrayソリューションを使用します。
lenrok258 2016

また、Androidでは負のマージンは公式にサポートされていないため、私もこれを回避します
Tim Kist

14

トグルボタンの周囲のパディングを削除するには、minWidthとminHeight 0dpを設定する必要があります。android:minWidth="0dp" android:minHeight="0dp"

  <ToggleButton
        android:id="@+id/toggle_row_notifications"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minWidth="0dp"
        android:minHeight="0dp"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:padding="@dimen/_5sdp"
        android:textOn=""
        android:textOff=""
        android:background="@android:color/transparent"
        android:button="@drawable/toggle_selector"
        />

ドローアブルファイルを次のようにボタン属性に設定します。 android:button="@drawable/toggle_selector"

以下は私のtoggle_selecter.xmlファイルです

<?xml version="1.0" encoding="utf-8"?>
     <selector xmlns:android="http://schemas.android.com/apk/res/android">
            <item android:drawable="@drawable/notifications_toggle_on" 
                  android:state_checked="true"/>
            <item android:drawable="@drawable/notifications_toggle_off" 
                  android:state_checked="false"/>
     </selector>

9

私はAndroidを初めて使用しましたが、同様の状況でした。@Delyanが提案したことを行い、xmlレイアウトファイルでandroid:background = "@ null"も使用しました。



6

同じ問題がありましたが、ボタンの背景色に原因があるようです。背景色を別の色に変更してみてください。例:

android:background="@color/colorActive"

それが機能するかどうかを確認します。ボタンで使用する場合は、スタイル定義できます。


これにより、ボタンのハイライト/アニメーション機能が削除されます。
Altus

6

上部と下部のパディングを削除するには

<com.google.android.material.button.MaterialButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minHeight="0dp"//to effect the following parameters, this must be added!
        android:insetTop="0dp"
        android:insetBottom="0dp"/>

左と右のパディングを削除するには

<com.google.android.material.button.MaterialButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minWidth="0dp"//to effect the following parameters, this must be added!
        android:insetLeft="0dp"
        android:insetRight="0dp"/>

4

これはパディングではありませんが、背景のドローアブルの影またはminHeightandの問題ですminWidth

それでも素敵なリップル効果が必要な場合は、次を使用して独自のボタンスタイルを作成できます?attr/selectableItemBackground

<style name="Widget.AppTheme.MyCustomButton" parent="Widget.AppCompat.Button.Borderless">
    <item name="android:minHeight">0dp</item>
    <item name="android:minWidth">0dp</item>
    <item name="android:layout_height">48dp</item>
    <item name="android:background">?attr/selectableItemBackground</item>
</style>

そしてそれをボタンに適用します:

<Button 
    style="@style/Widget.AppTheme.MyCustomButton"
    ... />

2

パディング、マージン、最小高さ/幅ではないようです。android:background="@null"ボタンを設定すると、タッチアニメーションが失われますが、背景を何にでも設定すると、境界が修正されることがわかります。


私は現在以下を使用しています:

minSdkVersion 19
targetSdkVersion 23


0

あなたもそれを行うことができます layout_width(height)パラメータ使用ます。

たとえば、android:layout_height="18dp"コードで上部と下部のスペースを削除しました。


0

標準ボタンは全幅での使用を想定していないため、これが発生します。

バックグラウンド

あなたが見ている場合は材料設計-ボタンのスタイルを、あなたはボタンが48dp高さクリック領域を持っていますが、用...何らかの理由で高さの36dpとして表示されることがわかります。

これは表示される背景の輪郭であり、ボタン自体の領域全体をカバーするわけではありません。
丸みを帯びた角といくつかのパディングがあり、それ自体でクリック可能であり、コンテンツをラップし、画面の下部の幅全体に及ぶことはありません。

解決

上記のように、必要なのは別の背景です。標準のボタンではなく、この素晴らしい波及効果を持つ選択可能なアイテムの背景。

この使用例では、?selectableItemBackground背景(特にリスト)に使用できるテーマ属性があります。
プラットフォームの標準リップル(または21未満のカラー状態リスト)を追加し、現在のテーマの色を使用します。

あなたのユースケースのために、あなたは単に以下を使うかもしれません:

<Button
    android:id="@+id/sign_in_button"
    style="?android:attr/buttonBarButtonStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Login"
    android:background="?attr/selectableItemBackground" />
                   <!--  /\ that's all -->

ビューが唯一のビューであり、画面全体に及ぶ場合は、レイアウトの重みを追加する必要もありません。

背景がどのように見えるかについて異なる考えがある場合は、自分でカスタムドローアブルを作成し、そこで色と状態を管理する必要があります。

この回答は質問からコピーされました Androidのボタンの周りのパディング(またはマージン?)を適切に削除する方法?


0

複数回答の周り掘りの時間後、私は最終的に、異なる要素を使用して操作しない溶液見つけminHeightたりminWidth、あるいはラップButtonの周りをRelativeLayout

<Button
    android:foreground="?attr/selectableItemBackground"
    android:background="@color/whatever" />

ここでの主なポイントは、多くの回答が規定しているように、背景ではなく前景の設定です。背景自体をselectableItemBackgroundに変更すると、ボタンの色/背景に加えた変更があれば、上書きされます。

フォアグラウンドを変更すると、両方の利点が得られます。「見えない」パディングを取り除き、ボタンのデザインを保持します。


0

以下のように、AppCompatButtonでボーダーレススタイルを使用できます。それとともにandroid:backgroundを使用します。

style = "@ style / Widget.AppCompat.Button.Borderless.Colored"

ボタンコード

<androidx.appcompat.widget.AppCompatButton
        android:id="@+id/button_visa_next"
        android:background="@color/colorPrimary"
        style="@style/Widget.AppCompat.Button.Borderless.Colored"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/spacing_normal"
        android:text="@string/next"
        android:textColor="@color/white"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

出力:

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.