如何使用ImageButton列表创建主要活动

时间:2017-11-21 16:53:02

标签: android

我正在构建一个Android应用。 在我的第一个活动中,我想创建一个按钮列表,如下所示:

enter image description here

所以我构建了这段代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
    android:background="#e3e3e3"
    android:gravity="center_horizontal"
    android:baselineAligned="false">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="4"
        android:orientation="horizontal"
        android:layout_gravity="center_vertical|center_horizontal"
        android:layout_marginTop="15dp"
        >
            <ImageButton
                android:id="@+id/ButtonArticoli"
                android:layout_width="150px"
                android:layout_height="150px"
                android:onClick="visualizzaArticoli"
                android:scaleType="fitCenter"
                android:src="@drawable/articoli"
                />
            <TextView
                android:id="@+id/textViewArticoli"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="@string/articoli"
                android:gravity="center" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="200px"
        android:orientation="horizontal"
        android:layout_gravity="center_vertical|center_horizontal"
        android:layout_marginTop="15dp"
        >
        <ImageButton
            android:id="@+id/ImageButtonCreateOrder"
            android:layout_width="150px"
            android:layout_height="150px"
            android:onClick="creaOrdine"
            android:src="@drawable/order"/>

        <TextView
            android:id="@+id/textView1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/ordini"
            android:gravity="center" />
    </LinearLayout>
    <!-- Prima Riga -->

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="200px"
        android:orientation="horizontal"
        android:layout_gravity="center_vertical|center_horizontal"
        android:layout_marginTop="15dp"
        >
        <ImageButton
            android:id="@+id/ImageButtonClienti"
            android:layout_width="150px"
            android:layout_height="150px"
            android:onClick="viewClienti"
            android:scaleType="fitCenter"
            android:src="@drawable/customer"/>

        <TextView
            android:id="@+id/textView23"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/cliente"
            android:gravity="center" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="200px"
        android:orientation="horizontal"
        android:layout_gravity="center_vertical|center_horizontal"
        android:layout_marginTop="15dp"
        >
        <ImageButton
            android:id="@+id/ImageButtonAlignDatabase"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="allineaDatase"
            android:scaleType="fitCenter"
            android:src="@drawable/sincronizza"/>

        <TextView
            android:id="@+id/textView2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/allinea_database"
            android:gravity="center" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="200px"
        android:orientation="horizontal"
        android:layout_gravity="center_vertical|center_horizontal"
        android:layout_marginTop="15dp"
        >
        <ImageButton
            android:id="@+id/ImageButtonSetting"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="setting"
            android:scaleType="fitCenter"
            android:src="@drawable/setting"/>

        <TextView
            android:id="@+id/TextView01"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/impostazioni"
            android:gravity="center" />
    </LinearLayout>


</LinearLayout>

但是当我尝试启动我的应用程序时,我的应用程序的结果是这样的: enter image description here

我们可以帮助我吗?

4 个答案:

答案 0 :(得分:1)

如果您有固定大小的元素,请使用此代码。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:background="#F1C983">

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="15dp"
    card_view:cardBackgroundColor="#D9EE9A">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher"
            android:background="@null"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Sample Text"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="50dp"/>
    </LinearLayout>
</android.support.v7.widget.CardView>

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="15dp"
    card_view:cardBackgroundColor="#D9EE9A">
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher"
            android:background="@null"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Sample Text"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="50dp"/>
    </LinearLayout>
</android.support.v7.widget.CardView>

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="15dp"
    card_view:cardBackgroundColor="#D9EE9A">
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher"
            android:background="@null"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Sample Text"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="50dp"/>
    </LinearLayout>
</android.support.v7.widget.CardView>

使用compile 'com.android.support:cardview-v7:25.0.0'获取CardView

Here

这是示例输出。

答案 1 :(得分:0)

将ListView或RecyclerView与自定义列表项一起使用,该列表项将包含图像按钮和自定义适配器

答案 2 :(得分:0)

  1. 而不是px使用dp更好!
  2. 如果您想要一个固定列表,那么您的XML是正确的,但如果您想要一个动态列表,则应该像其他用户所说的那样使用ListViewRecycleView
  3. LinearLayout中的重量是错误的,当您希望屏幕适合每个屏幕时,无论大小如何,都应该使用重量(并且您需要通过儿童“分发”您的重量)。
  4. 要使您的屏幕与第一张图片类似,您需要在第二张LinearLayout
  5. 中设置背景

答案 3 :(得分:0)

这是你想要的回收者视图,

public class MainPageAdapter extends RecyclerView.Adapter<MainPageAdapter.ViewHolder> {

    private @DrawableRes int[] iconDrawables;
    private String[] texts;


    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        final View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.img_lockIcon.setImageResource(iconDrawables[position]);
        holder.txt_whatever.setText(texts[position]);
    }

    @Override
    public int getItemCount() {
        return iconDrawables != null ? iconDrawables.length : 0;
    }

    public void setData(@DrawableRes int[] iconDrawables, String[] texts){
        this.iconDrawables = iconDrawables;
        this.texts = texts;
        this.notifyDataSetChanged();
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {
        ImageView img_icon;
        TextView txt_whatever;
        ImageView img_lockIcon;

        public ViewHolder(View itemView) {
            super(itemView);
            img_icon = itemView.findViewById(R.id.item_img_icon);
            txt_whatever = itemView.findViewById(R.id.item_txt_whatever);
            img_lockIcon = itemView.findViewById(R.id.item_img_lockIcon);
        }
    }
}

这是R.layout.item,

<?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="wrap_content"
    android:layout_margin="8dp"
    android:padding="8dp"
    android:background="@color/colorAccent"
    xmlns:tools="http://schemas.android.com/tools">
    <ImageView
        android:id="@+id/item_img_icon"
        android:layout_width="36dp"
        android:layout_height="36dp"
        tools:src="@mipmap/ic_launcher"/>
    <TextView
        android:id="@+id/item_txt_whatever"
        android:layout_width="0dp"
        android:layout_height="36dp"
        android:layout_weight="1"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:textColor="@android:color/white"
        tools:text="YouTube"/>
    <ImageView
        android:id="@+id/item_img_lockIcon"
        android:layout_width="40dp"
        android:layout_height="40dp"
        tools:src="@mipmap/ic_launcher"/>


</LinearLayout>

以下是MainActivity布局,

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:cardCornerRadius="0dp"
        app:cardElevation="0dp"
        app:cardBackgroundColor="@color/colorPrimary"
        android:layout_margin="8dp">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            tools:listitem="@layout/item"/>

    </android.support.v7.widget.CardView>
</FrameLayout>

以下是MainActivity,

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        RecyclerView recyclerView = findViewById(R.id.recyclerView);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        MainPageAdapter adapter = new MainPageAdapter();
        recyclerView.setAdapter(adapter);
        //Set your data
        //adapter.setData();
    }
}

您可以根据需要更改颜色,并通知ı使用两个不同的数组作为适配器,但您也可以使用pojo类。希望这会对你有所帮助。