2011-06-21 3 views
4

私はイメージボタンを持っています。必要に応じてこれをカスタムビューに置き換えることができます。イメージボタンの高さをFill_parentとして指定する必要があります。画像が画面内の利用可能な高さに伸びるようにします。これを行うとき、私は幅を緩めたくありません。私はそれが高さのように最小であることを望み、高さよりも大きければ、それは問題ではない。私はこれを長く望んでいない。 私はこれをやっている間にアスペクト比も維持したいと思っています。この種のビューを得るために調整が必要なパラメータを教えてください。この点で何らかの助けがありがたいです。ご協力いただきありがとうございます。イメージボタンのサイズを常に正方形にします。 Android

編集:以下は、私がfill_parentとして高さと水平スクロールビューを持つようにしようとしていますし、その高さに適合し、拡張したりごとに幅を縮小した画像でそれを埋めるためにしようとしていた中で、完全なXMLがありますアスペクト比。画像が小さい場合でも、高さが常に水平スクロールビューを占めるようにスケールアップする必要があります。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" android:layout_height="fill_parent" 
    android:orientation="vertical"> 

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" android:layout_height="fill_parent" 
     android:orientation="vertical" android:layout_weight="3" 
     android:background="#666666"> 
    </LinearLayout> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" android:layout_height="fill_parent" 
     android:orientation="vertical" android:layout_weight="7" 
     android:background="#888888"> 
     <HorizontalScrollView android:id="@+id/horizontalScrollView1" 
      android:layout_width="fill_parent" android:layout_height="fill_parent"> 
      <LinearLayout android:id="@+id/linearLayout1" 
       android:layout_width="fill_parent" android:layout_height="fill_parent" 
       android:orientation="horizontal"> 

       <ImageView android:src="@drawable/image1" 
        android:layout_weight="1" android:layout_width="wrap_content" 
        android:layout_height="fill_parent" android:adjustViewBounds="true" 
        android:id="@+id/attachimagebutton_2" /> 

       <ImageView android:src="@drawable/image2" 
        android:layout_weight="1" android:layout_width="wrap_content" 
        android:layout_height="fill_parent" android:adjustViewBounds="true" 
        android:id="@+id/attachimagebutton_2" /> 

      </LinearLayout> 
     </HorizontalScrollView> 
    </LinearLayout> 
</LinearLayout> 

答えて

2

あなたはアンドロイドのボタンで何かを作ることができるので、まあ、それはImageButtonされるために必要はありません...

あなたは、それをidを与え、あなたのXMLに画像をImageViewを追加することができます高さはfill_parent、幅はwrap_contentとなり、縦横比はandroid:adjustViewBounds="true"に固定されます。次にandroid:clickable="true"を追加し、idでコード内で見つけることもできます。次に、onClickListenerを追加できます。

が、それは私が異なったアプローチを取ってお勧めします

+0

あなたは、私が書いたものを試してみましたか?あなたが言っていることを理解していれば、そのコードは... layout_widthプロパティのwrap_contentと共にadjustViewBoundsが幅を固定して調整します。 – CodeKrieger

+0

しかし、コンテナがあれば、300x300に画像を伸ばすにはどうすればいいですか? 300x72 ...その場合は、最初に最小の長さを塗りつぶすので、常に72x72になります。なぜそれを300x72として持っていますか?それをもっと大きくすることはできますか? あなたは正方形を持ち、アスペクト比を維持しているので、異なる高さと幅を持つことはできません。あなたが指しているものをもう一度考えてください。 – CodeKrieger

+0

私は上記の設定で見た結果が300x72であることを意味しました。これは望ましい結果ではありません。望ましい結果は300x300です。高さは「fill_parent」に設定されています。これは約300です。幅はwrap_contentに設定されています。画像が72x72から300x300に拡大されることを願っています。画像が600x800の場合、300x400に設定したいのですが、最大高さは300です。しかし、私の要求には最大幅はありません。これはできますか? また、高さは約300です。私はすべての種類の画面サイズを設定する必要があるので、fill_parentに設定し、特定のdpではなく設定する必要があります。 – Vinodtiru

1

の作品を願って、親のレイアウトがgravity="center_horizontal"を適用しており、次のステップは、正方形として、そのサイズを設定するImageButtonクラスを拡張するカスタムビューを持っている、それは本当に簡単です。

新しいクラスを作成し、それをSquareImageButtonとし、ImageButtonに拡張します。コンテキストと属性を持つデフォルトのコンストラクタを追加してスーパー関数を呼び出せば、何も追加する必要はありません。

これで、測定された幅と高さ(int値)が最小値になり、(メソッドの必要に応じて)setMeasuredDimension(w, h)を新しい最小値で呼び出すと正方形になります。それは私のために働いた、とここにあなたがちょっと失われた場合のコードです:

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    int minDimension = Math.min(widthMeasureSpec, heightMeasureSpec); 
    setMeasuredDimension(minDimension, minDimension); 
} 
+0

これはデバイスの長さが最小の正方形のビューを作成します。 –

+0

最大1つをとると、許可された描画領域よりも大きな高さのボタンを作成することがあります。編集:私はあなたが言ったが、それは私のために別のレイアウトで働いている、それは表示ディメンションが返されるべきではなく、ビューに割り当てられた領域 – Armando

0

は、このコードを試してみてください、それは私のために働きます。

public class ButtonSquare extends Button { 
public ButtonSquare(Context context) { 
    super(context); 
} 

public ButtonSquare(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

public ButtonSquare(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
} 

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    int height = MeasureSpec.getSize(heightMeasureSpec); 
    super.onMeasure(
      MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY), 
      MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)); 
} 

}

関連する問題