28

layout_marginLeft="30dip"ボタン用に定義されたスタイルの属性を使用しました。このスタイルをボタンごとに個別に適用すると、左マージンが希望どおりに配置されます。

しかし、次にテーマを定義し、ボタンのスタイルを属性に割り当てandroid:buttonStyleてプロジェクトに適用しました。
ただし、左マージンプロパティは無視されます。私がここで何をしなければならないかについて何か考えはありますか?

次のようにstyle.xml:

<style name="btnstyle" parent="@android:style/Widget.Button">
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_marginLeft">30dip</item>
    <item name="android:textColor">#FFFFFF</item>       
</style> 

<style name="appstyle" parent="android:Theme"> 
    <item name="android:buttonStyle">@style/btnstyle</item> 
</style>
4

5 に答える 5

14

これは、形状の周りに insets タグをラップすることで実現できるようです。

このような:

<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetLeft="5dp"
    android:insetRight="5dp"
    android:insetTop="5dp"
    android:insetBottom="5dp">

<shape  
    android:shape="rectangle">
    <solid 
        android:color="#fff"/>
    <stroke
        android:width="1dp"
        android:color="#333"/>
    <corners 
        android:radius="10dp"/>
</shape>
</inset>
于 2014-01-04T00:11:42.810 に答える
11

ここに素晴らしい答えがあります stackoverflow。基本的にLayoutParams(layout_) は子ビューに使用され、親ViewGroupにどのように配置する必要があるかを伝えます。ただし、各タイプ ( 、など)LayoutParamsに固有であるため、テーマに対してこのように一般化することはできません。ViewGroupLinearLayoutRelativeLayoutFrameLayoutLayoutParams

テーマで完全に一般化されたスタイルを使用することはできませんが、次のように、必要な特定のビューごとにスタイルを使用できるため、これはすべて非常に残念です。

<Button style="@style/btnstyle"/>
于 2013-03-21T13:10:29.073 に答える
3

これの底にたどり着いたことはありますか?私は同じ問題を抱えています。テーマ内のスタイルを介して Button または ImageButton に適用される場合、すべての margin 属性は無視されます。

ただし、ボタンの「スタイル」属性を使用してスタイルを直接適用すると機能することわかりました。マージンは「buttonStyle」仕様の一部ではないようです。

于 2011-01-10T10:36:01.983 に答える
2

これはAndroidのバグだと思います。

一方、スタイルを使い始めたときは、すべてをスタイル内に配置しました。すべてのウィジェットのスタイルを作成していることに気付きました。現在、位置属性をスタイル内に配置しています。

したがって、 XML 要素のwidthheightpaddingおよびlayoutプロパティと、スタイル内の残りの属性です。

于 2011-11-25T17:32:35.753 に答える