2

Androidアプリケーションでカスタム幅のUI要素を使用しています。 UI要素は基本的に、2つの緑色の円を持つブロックです。ブロックの左側に1つの円、右側にもう1つの円です。Android:LayoutParamsを使用してViewオブジェクトの幅を設定する

UIエレメント全体の幅をプログラムで設定したいと考えています。円は常に一定の大きさでなければならず、中央に座っているブロックは、残りのスペースを埋めるようにサイズ調整する必要があります。ここで

は、私が現在持っているものです。

<?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="horizontal" > 

    <View 
     android:background="@drawable/green_circle" 
     android:id="@+id/left_green_circle" 
     android:layout_width="20dp" 
     android:layout_height="20dp" 
     android:layout_weight="1" 
     android:layout_gravity="center_horizontal" 
    /> 

    <View 
     android:background="@drawable/blue_rectangle" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:layout_gravity="center_horizontal" 
    /> 

    <View 
     android:background="@drawable/green_circle" 
     android:id="@+id/right_green_circle" 
     android:layout_width="20dp" 
     android:layout_height="20dp" 
     android:layout_weight="1" 
     android:layout_gravity="center_horizontal" 
    /> 

</LinearLayout> 

私は、このようなコードで表示のレイアウトパラメータを設定します。

int layoutLeft = block_x_position - green_circle_width; 
int layoutWidth = block_width + (green_circle_width * 2); 

RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(layoutWidth, block_height); 
layoutParams.setMargins(layoutLeft, block_y_position, 0, 0); 
this.setLayoutParams(layoutParams); 

this.requestLayout(); 

私が原因で上記のコードでRelativeLayoutを使用していますこの全体のView要素の親はRelativeLayoutです。残念ながら、私は期待していた結果を得ていません。私の "block_width"変数は "40dp"で、私の "green_circle_width"変数は "20dp"です。私が代わりに私のビューのXMLで「match_parent」の「wrap_content」を使用して試してみました

enter image description here

、それは任意のは全く影響を与えていない:ここで私は取得していますものです。私のブロックが幅を超えて拡張されていて、それを拡張したいのであれば、どんな考えですか?

ありがとうございました。

+0

右にいくらかのパディングはありますか? – bluejamesbond

答えて

1

緑色の円の画像(jpgまたはpng)の幅が20dpを超えていると想像しているため、円をカットしています。緑色の円を拡大/縮小するには、imageViewを使用し、scaleType属性を設定します。

そうでなければ、あなたが望むものを正確に得ることができます。サークルビューを20dpにすると、ブロックがいっぱいになる余分なスペースがたくさん作成されます。円の幅を正しく設定するかscaleTypeを使用すると効果があります。

ブロックの幅としてmatch_parentを使用しないでください(これは、円で占められていると思われるスペースを含めて、全体の幅を占めることを意味します)。代わりに、任意の幅(たとえば0dp)を使用し、layout_weightを1に設定します。

+0

私は、円が切り取られているという事実よりも、私が長方形のブロックで見ている余分な幅が心配です。円は、長方形のブロックが測定された幅の境界から外れているため、簡単に切断されています。私は単に、青いブロックが緑色の円が占めていないすべてのスペースを占めるようにしたい。 – David

+0

申し訳ありませんが、もう1つのコメント:緑色の円は画像ではありません。これらは、別々に定義されたXML描画可能な図形で、次のように定義されています。 <勾配 アンドロイド:角度= "270" アンドロイド:startColor = "#82b446" アンドロイド:endColor = "#658d47" /> <ストローク アンドロイド:幅= "1DP" android:color = "#658d47" /> 私は形状を独立して定義していますので、以前に投稿したXMLでその形状を使用しています。 – David

+0

ああ、訂正してくれてありがとう。レイアウトの重みが1になるように3つのビューをすべて設定することは望ましくありません。これは、すべてが同じ幅になるようにすることを意味します。ブロックをlayout_weightに1に設定し、サークルをウェイトのないサイズに設定するだけです。それを試してください(ブロック幅をfill_parent以外に設定してください)。 –

関連する問題