Android Wrapping Buttons

2019-06-14 09:24发布

I'm completely shocked that I can't find anything about how to do this. How do I wrap images in a layout to just drop down to the next line.. and continue to do so until all of the images have been shown? I'm using 80x80 images as buttons and when however many can fit on one line, I want it to wrap them to the next line and continue. When those have reached the end, I want it to wrap again.

Can someone please show me how to build this layout? Thank you.

2条回答
Juvenile、少年°
2楼-- · 2019-06-14 09:38

In API 12 and earlier, you want:

public static final int BUTTON_WIDTH = 80;
public static final int BUTTON_HEIGHT = 80;
public static final int SPACING = 8;

Display display = getWindowManager().getDefaultDisplay();
public int screenWidth = display.getWidth();
public int screenHeight = display.getHeight();    

//somewhere a drawButton(int y, int x) should be defined

for (int i = 0, i < screenHeight, i += (BUTTON_HEIGHT + SPACING)) {
    for (int j = 0, j < screenWidth, j += (BUTTON_WIDTH + SPACING)) {
        drawButton(i, j);
    }
}

In API 13 and later, replace lines 5-7 with the following:

Point screen = new Point();
getWindowManager().getDefaultDisplay().getSize(screen);

public int screenWidth = screen.x;
public int screenHeight = screen.y;
查看更多
闹够了就滚
3楼-- · 2019-06-14 09:41

I think what you may be looking for is the GridView which uses a ListAdapter to get its data from. See http://developer.android.com/reference/android/widget/GridView.html for more details. Also see [Android SDK Directory]/samples/ApiDemos/src/com/example/android/apis/view/Grid1.java for a demo of a simple launcher using the grid. (Full example code listed below.)

/*
 * Copyright (C) 2007 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.example.android.apis.view;

import android.app.Activity;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;

import java.util.List;

//Need the following import to get access to the app resources, since this
//class is in a sub-package.
import com.example.android.apis.R;


public class Grid1 extends Activity {

    GridView mGrid;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        loadApps(); // do this in onresume?

        setContentView(R.layout.grid_1);
        mGrid = (GridView) findViewById(R.id.myGrid);
        mGrid.setAdapter(new AppsAdapter());
    }

    private List<ResolveInfo> mApps;

    private void loadApps() {
        Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);

        mApps = getPackageManager().queryIntentActivities(mainIntent, 0);
    }

    public class AppsAdapter extends BaseAdapter {
        public AppsAdapter() {
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView i;

            if (convertView == null) {
                i = new ImageView(Grid1.this);
                i.setScaleType(ImageView.ScaleType.FIT_CENTER);
                i.setLayoutParams(new GridView.LayoutParams(50, 50));
            } else {
                i = (ImageView) convertView;
            }

            ResolveInfo info = mApps.get(position);
            i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));

            return i;
        }


        public final int getCount() {
            return mApps.size();
        }

        public final Object getItem(int position) {
            return mApps.get(position);
        }

        public final long getItemId(int position) {
            return position;
        }
    }

}
查看更多
登录 后发表回答