web-dev-qa-db-ja.com

Android画面サイズに合わせてグリッドビューを調整

アプリケーションのグリッドビューには3行3列があります。デバイスの画面サイズに関係なく、これが画面いっぱいになるようにします。

ウィンドウサイズを取得し、それに応じてlayoutparamsを設定しようとしました。しかし、これはlinearlayoutのweightsumで機能するため、完全なアライメントは得られません。

したがって、gridviewにweightsumを使用できますか、または他に使用できるAndroidプロパティがあります。時間と応答に感謝します。

<GridView
                xmlns:Android="http://schemas.Android.com/apk/res/Android"
                Android:id="@+id/gridview"
                Android:layout_width="fill_parent"
                Android:layout_height="fill_parent"
                Android:layout_below="@+id/text1view"
                Android:background="@drawable/home_bg"
                Android:gravity="center"
                Android:horizontalSpacing="10dip"
                Android:numColumns="3"
                Android:stretchMode="columnWidth" />

各グリッド項目は

<?xml version="1.0" encoding="utf-8"?>
<ImageView
    Android:id="@+id/grid_item_image"
    Android:layout_width="wrap_content"
    Android:layout_height="75dip"
    Android:layout_margin="0dip"
    Android:padding="0dip" >
</ImageView>

<TextView
    Android:id="@+id/grid_item_text"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_alignParentBottom="true"
    Android:layout_below="@+id/grid_item_image"
    Android:gravity="center_horizontal"
    Android:padding="0dip"
    Android:textColor="#000000"
    Android:textSize="10sp" >
</TextView>

アダプターのコード:

    @Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder;

    if (convertView == null) {
        LayoutInflater mInflater = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = mInflater.inflate(R.layout.griditems, null);
        holder = new ViewHolder();
        holder.text1 = (TextView) convertView
                .findViewById(R.id.grid_item_text);

        holder.image = (ImageView) convertView
                .findViewById(R.id.grid_item_image);

        // if it's not recycled, initialize some attributes
        holder.image.setImageResource(gridItemIds[position]);
        holder.text1.setText(gridTitles[position]);
        int h = mContext.getResources().getDisplayMetrics().densityDpi;

        // holder.image.setLayoutParams(new LayoutParams(h-50,h-50));
        convertView.setLayoutParams(new GridView.LayoutParams(h - 45,
                h - 39));
        // holder.image.setScaleType(ImageView.ScaleType.CENTER_CROP);
        // holder.image.setScaleType(ImageView.ScaleType.FIT_XY);
        // holder.image.setPadding(20, 20, 20, 20);

        // convertView.setLayoutParams(new GridView.LayoutParams(Utils
        // .getLayoutParameter(), Utils.getLayoutParameter()+50));

        holder.image.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                new ModuleManager().startModuleACtivity(position, mContext);
            }
        });
        convertView.setTag(holder);
    } else {

        holder = (ViewHolder) convertView.getTag();

    }

    return convertView;
}

static class ViewHolder {
    TextView text1;
    ImageView image;

}

plsはラインを見る

convertView.setLayoutParams(new GridView.LayoutParams(h-45, h-39));

異なるサイズのエミュレーターでいくつかの試行を行って、この値に到達しました。しかし、高さと幅を定義する正しい方法だとは思いません。

21
png

あなたの質問を理解している限り、あなたはコードを投稿していないので、あなたがやろうとしていることは、gridviewをフルスクリーンで表示したいということです。

まず、グリッドビューを配置するためにレイアウトを使用する必要があります。次の手順を実行します。

親を埋めるためにlayoutの高さと幅を作成します。

Android:layout_width="fill_parent"
Android:layout_height="fill_parent"

次に、gridviewの高さと幅もfill_parentに設定します。

まあ、これはあなたがこのように働いていたかもしれないと思われる解決策です。いくつかのコードを置く方がはるかに良いでしょう。これがあなたのために働くことを願っています。

更新:問題はここにあるかもしれません:

 convertView.setLayoutParams(new GridView.LayoutParams(h-45, h-39));

への変更:

 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT);
 convertView.setLayoutParams(new GridView.LayoutParams(params));

これがあなたのために働くことを願っています。

15
Usama Sarwar

@preetha:まずこの例を見て、これを使用しました。レイアウトは、デバイスの高さと幅に関係なく影響しませんでした。

http://developer.Android.com/resources/tutorials/views/hello-gridview.html

xmlで以下を設定します

Android:id="@+id/gridview"
    Android:layout_width="fill_parent" 
    Android:layout_height="fill_parent"
    Android:columnWidth="90dp"
    Android:numColumns="auto_fit"
    Android:verticalSpacing="10dp"
    Android:horizontalSpacing="10dp"
    Android:stretchMode="columnWidth"
    Android:gravity="center"

お役に立てれば...

11
optimus