web-dev-qa-db-ja.com

Android Drawable:XMLファイルで図形の幅をパーセントで指定しますか?

ビューの背景として設定するシンプルなDrawableを作成しようとしています(setBackgroundDrawableを使用)。ドローアブルの背景を2つの等しい長方形(50%-50%)に分割したいだけです。最初は黒で塗りつぶし、2番目は白で塗りつぶします。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:id="@+id/back_color_1">
        <shape Android:shape="rectangle">
          <solid Android:color="#000000" />
        </shape>
    </item>
    <item Android:id="@+id/back_color_2">
        <shape Android:shape="rectangle">
          <solid Android:color="#FFFFFF" />
        </shape>
    </item>
</layer-list>

描画可能なXML定義ファイルで、各図形の幅を50%に指定するにはどうすればよいですか? Android:width = "50%"のようなもの。

(Android 3.0に取り組んでいますが、それは一般的なAndroidの質問だと思います。)

PS:CSSまたはXAMLでこれを行うことができます。

26
Alex Vang

パーセンテージは指定できません。それにディメンション値を指定する必要があります。

_Android:width_はここで定義されています: http://developer.Android.com/reference/Android/R.attr.html#width

(強調鉱山)

ディメンション値である必要があります。これは、「14.5sp」などの単位が追加された浮動小数点数です。使用可能な単位は、px(ピクセル)、dp(密度非依存ピクセル)、sp(優先フォントサイズに基づいてスケーリングされたピクセル)、in(インチ)、mm(ミリメートル)です。

各次元タイプの定義については、次を参照してください: http://developer.Android.com/guide/topics/resources/more-resources.html#Dimension

独自の属性( styleable を参照)を作成し、onDraw(...)で自分で計算を実行する必要があります。

例については、これらの2つの質問とその中のリンクを参照してください:

10
Aleadam

Android:layout_weight = "。20"は、パーセンテージで実装する最良の方法です

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
 Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:orientation="vertical" >
<TextView
    Android:id="@+id/logTextBox"
    Android:layout_width="fill_parent"
    Android:layout_height="0dp"
    Android:layout_weight=".20"
    Android:maxLines="500"
    Android:scrollbars="vertical"
    Android:singleLine="false"
    Android:text="@string/logText" >
</TextView>

</LinearLayout>
3
Swapnil Kotwal

本当のパーセンテージ設定はありませんが、近づくかもしれません。

これを実現する最も簡単な方法は、画像を背景のドローアブルとして使用し、白黒の分割画像を作成することです。

私が何かを分割する他の唯一の方法は、2つのビューを使用することです。それぞれに独自のbgカラーがあり、Android:layout_weight属性に同じ正の値(つまり、50/50)が指定されています。次に、使用可能なスペースを分割します。

お役に立てれば!

3
chris

これを実現するために私が見つけた方法は、RelativeLayoutから継承する独自のクラスを作成することでした。ここで、onMeasureメソッドをオーバーライドしています。この段階では、ビューの高さがわかっているので、背景をフェッチし、手動で setLayerInset を使用してアイテムのインセットを設定しました。

    LayerDrawable bg = (LayerDrawable)getBackground();
    int h = getMeasuredHeight();
    bg.setLayerInset(1, 0, 0, 0, h/2);

ただし、この方法は少し面倒です。ほとんどの場合、chrisが提供する答えで十分です。

2
Skymt

Swapnilが述べた最善の方法は、LinearLayoutでlayout_weightを使用することです。水平方向に移動する場合は、layout_widthを「fill_parent」に設定し、次に、layout_weightを必要なパーセンテージに設定します。以下のようなものから始めて、layout_width値をいじって感じてください(または、理解を深めるためにビューを追加してください)。

<LinearLayout    
      Android:layout_width="fill_parent"
      Android:layout_height="wrap_content"
      Android:orientation = "horizontal" >

    <View
      Android:layout_width="fill_parent"
      Android:layout_height="30dip"
      Android:layout_weight="0.5"
      Android:background="#aaffaa" />
    <View
      Android:layout_width="fill_parent"
      Android:layout_height="30dip"
      Android:layout_weight="0.5"
      Android:background="#aaaaff" />
</LinearLayout>
0
ajacian81