2016-10-04 14 views
4

は、私は私のアクションバーのアイテムに問題を抱えている: enter image description hereアプリツールバーのメニュー項目アイコンとタイトルの間の余白や余白を増やす方法はありますか?

更新アイコンは、タイトル「REFRESH」に近すぎます。それは厄介なように見えます。

私は、画像を編集して強制的にパディングを追加したり、そうしたXML描画可能なものにラップしたりするために、この問題を修正する方法があることを知っています。

これを修正するには、イメージ自体にスペースを追加する必要はないようです。問題を解決するためにパディングやマージンの属性を変更する簡単な方法があるはずです。私は彼らがここでとても接近していることに驚いています。

アイデア?同様に、メニュー項目に設定し

答えて

12

私はこのことを理解するのにとても時間がかかりました。

最終的にAndroid Device Monitorを使用することになりました。私はツール> Android> Androidデバイスモニターに行きました。起動したら、「デバイス」タブで自分のアプリのパッケージ名をクリックしてから、「UI Automatorのビュー階層をダンプする」ボタンをクリックしました。 [デバイス]タブをクリックします。これにより私の現在の画面のUIがわかりました。次に、「更新」ボタンをクリックして、2つのビューが隣り合っていないことを発見できました。それはDrawableLeftを持つTextView 1つでした。私は知っている、私が知っている、それは明らかであり、私が考えた最初のものであったはずです。

私はすでにActionBarSherlock - How to set the padding of each actionbar's icon?を見つけましたが、それは私のためには機能しませんでした。しかし、これは私に必要なものの例を与えました。つまり、ActionButtonスタイルを変更しました。

私はそれがDrawableLeftを持つTextViewであることを知ったので、私はDrawablePaddingを変更する必要があることを知っていました。それが私がスタイルに加える必要があった変更です。私は私のstyles.xmlにこれを追加するために必要なActionButtonのテーマを変更するには

<style name="ActionButton" parent="@android:style/Widget.ActionButton"> 
    <item name="android:drawablePadding">@dimen/action_button_padding</item> 
</style> 

dimen.xml:次に

<dimen name="action_button_padding">4dp</dimen> 

style.xmlのテーマセクションに微調整:

<style name="Theme.MyTheme" 
     parent="Theme.AppCompat.Light.NoActionBar"> 
    <!-- other styles --> 
    <item name="android:actionButtonStyle">@style/ActionButton</item> 
</style> 

これは機能します。カスタムActionProviderを設定したり、画像を編集して画像ファイルにスペースを追加したり、各ボタンに余分なXMLファイルを使用する必要はありません。

+1

あなたはアイテム間の距離を増やすことができます。しかし、それを減らすことはできません。負の-10dpまたは-30dpは効果がありません。どのように減らすことができますか?とにかく仕事をしてくれてありがとう! :) – careful7j

4

使用のカスタムレイアウト:

<item 
    android:id="@+id/common_submenu_sync_contact" 
    android:title="Refresh" 
    app:actionLayout="@layout/custom_menu_item" /> 

は、レイアウトファイルを作成し、app:actionLayoutとして設定し、このファイルを使用します。

custom_menu_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<ImageView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/refresh" 
    android:padding="10dp" /> 

ハッピーコーディング。

+0

これは何ですか?これは機能していません... –

2

@Chad Schultzの答えを修正して、彼の解決策は私のために働いていませんでした。しかし、私はActionButtonのスタイルを変更します。

<style name="ActionButton" parent="@android:style/Widget.ActionButton"> 
    <item name="android:paddingStart">0dp</item> 
    <item name="android:paddingEnd">0dp</item> 
    <item name="android:minWidth">0dp</item> 
</style> 
0

埋め込みパッディングを挿入したインセットドロアブルを使用することもできます。そうすれば、アプリ内のすべてのメニューボタンにスタイルを適用する必要がなくなり、アプリ内の別の場所にそのメニューアイテムの画像を使用すると奇妙なパディングが発生する心配もありません。

<inset 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:drawable="@drawable/your_drawable" 
    android:insetTop="3dp" 
    android:insetRight="3dp" 
    android:insetBottom="3dp" 
    android:insetLeft="3dp" /> 
関連する問題