我需要创建一个ListView
或TableLayout
每行由 3 列和 3 个按钮组成,类似于:
但屏幕不仅会包含此控件,还会包含文本字段和其他布局,我需要一个网格来呈现如下形状(例如)。
关于如何实现这一目标以及如何处理Button
点击的任何想法?由于我是 Android 新手,我不知道如何创建它。
我需要创建一个ListView
或TableLayout
每行由 3 列和 3 个按钮组成,类似于:
但屏幕不仅会包含此控件,还会包含文本字段和其他布局,我需要一个网格来呈现如下形状(例如)。
关于如何实现这一目标以及如何处理Button
点击的任何想法?由于我是 Android 新手,我不知道如何创建它。
AListView
主要用于可变数据。如果您有某种数据可以每次都以相同的方式显示并且可以增长/删除,那么 ListView 是一个不错的选择。
另一方面,如果您有静态数据,静态布局(如 TableLayout、LinearLayout 等)是一个不错的选择。这完全取决于您拥有哪些数据以及您希望如何使用它。
我希望你不想在那个截图上做同样的列,因为你在智能手机上没有那个空间。
假设您需要 3 列,并且该数据是可变的。
您可以在根目录中使用带有a 的costum ListView和. 然后,您插入的每个元素都需要与. 这种组合保证了行上的每个元素都具有相同的宽度,因此它是可选的。LinearLayout
android:orientation="horizontal
layout_weight="1"
android:layout_width="0dp"
ListView
你的服装列表行应该是这样的:
<LinearLayout
android:layout_width="fill_parent"
...
android:orientation="horizontal" >
<TextView
android:layout_width="0dp"
...
android:layout_weight="1" />
...
要处理按钮单击,您需要在您的服装 ListView 上的适配器内setOnClickListener
的方法中获取它时在 Button 中执行。getView
然后您可能会在单击按钮和 ListView 时遇到问题。解决此问题的常用方法是将按钮放在android:focusable="false"
声明它的 xml 中。但一次一件事;)
编辑(因为评论:添加一个禁用/启用按钮的复选框):
如果你想要一个复选框来禁用/启用按钮,你需要在你getView
的服装 ListView 的适配器上做一些工作。
你需要:
CheckBox myCheckBox = (CheckBox) inflater.findViewById(R.id.checkboxid)
其中充气器是您在 getView 中定义的那个,而 checkboxid 是您在 xml 行中定义的 id。myCheckBox.setTag(button)
按钮是您要启用/禁用的按钮,您可以像获得 myCheckBox 一样获得他setOnCheckedChangeListener
,您可以根据复选框的状态更改按钮的可见性。最后一个项目符号听起来应该是这样的:
myCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Button myButton = (Button) buttonView.getTag();
if ( isChecked )
myButton.setVisibility(View.VISIBLE);
else
// Use GONE if you want to get that space for other views
myButton.setVisibility(View.GONE);
}
});
我建议你看看这样的应用程序,因为你是 android 新手,然后也看看一些应用程序、教程和控件,没有人能告诉你如何制作这个应用程序,如果它是一个错误或什么的,那么它会回答的。但是你的问题真的很广泛。它不是应用程序的问题,而是如何开发整个应用程序的问题。我认为更好,您也可以查看一些应用程序或此链接。对你有一个开始使用 android 会有帮助。
我为您提供问题的完整实现。首先在您的 xml 中创建一个列表视图
文件名:Yourlist.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearlayout_id"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="@color/encode_view">
<ListView
android:id="@+id/info_list_id"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_above="@+id/cancelinfobtn_id" >
</ListView>
</RelativeLayout>
之后再创建一个带有一个文本框和一个按钮的xml
文件名=youCustomlayout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
/>
</RelativeLayout>
现在创建一个这样的自定义列表
package com.menu.in;
import java.util.ArrayList;
import com.daffodilsw.client.android.R;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.SectionIndexer;
import android.widget.TextView;
public class MyContactAdapter extends ArrayAdapter {
ArrayList<String> userContact_List,userheading_list;
private Context mcontext;
private View rowview;
LayoutInflater inflater;
public static ArrayList<Boolean > itemchecked=new ArrayList<Boolean>();
public MyContactAdapter(Context context, ArrayList< String> usercontactheading_list,ArrayList<String> usercontactheading_list ) {
super(context,R.layout.yourcustomlayout,usercontactheading_list);
userheading_list=new ArrayList<String>();
userheading_list=usercontactheading_list;
mcontext=context;
inflater = (LayoutInflater) mcontext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public View getView(final int position, View convertView, ViewGroup parent) {
rowview=convertView;
if(convertView==null)
{
rowview = inflater.inflate(R.layout.detail_value_layout, parent, false);
}
TextView textView_heading = (TextView) rowview.findViewById(R.id.textView1);
Button btn=(Button) rowview.findbyviewid(R.id.Button1);
checkbox_detail.setOnClickListener(new OnClickListener() {
textView_heading.setText(userheading_list.get(position));
return rowview;
}
}
最后在您的主要活动中制作一个适配器,然后调用适配器的构造函数并在您的列表视图中设置此适配器。