【问题标题】:Very custom listview row?非常自定义的列表视图行?
【发布时间】:2014-10-20 09:06:33
【问题描述】:

我在我的 photoshop 中有一个特定的设计,但我不知道如何在 android 中为表格行制作它。正如您在图片中看到的,我需要一个警报列表。所以我想把它作为每一行的表行都一样,这样我就可以通过 *.java 向该表行输入内容。

这是图片

这是我现在拥有的代码

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#162030"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<ScrollView
    android:id="@+id/scrollView1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_below="@+id/textView1"
    android:layout_marginTop="76dp" 
    android:background="#131b29"

    >

    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="774dp"
        android:orientation="vertical"  >

        <TableRow
            android:id="@+id/TableRow04"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:layout_marginTop="20dp"
            android:layout_marginBottom="0dp"
            android:background="#162030"
            android:minHeight="60dp" >
        </TableRow>

        <TableRow
            android:id="@+id/TableRow05"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:layout_marginTop="20dp"
            android:layout_marginBottom="0dp"
            android:background="#162030"
            android:minHeight="60dp" >
        </TableRow>

</TableLayout>
</ScrollView>

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="76dp"
    android:shadowColor="#62f1fa"
    android:shadowDx="0.0"
    android:shadowDy="0.0"
    android:shadowRadius="20"
    android:text="0:00"
    android:textColor="#5ee6ef"
    android:textSize="50sp" />

【问题讨论】:

  • 为什么不使用 ListView 而不是 TableLayout ?
  • 是的,我实际上正在考虑它,但我还没有找到任何好的例子让它看起来像这样,如果你能帮助我,我将非常感激:)

标签: android android-layout photoshop android-2.2-froyo


【解决方案1】:

让你的主要 xml 布局如下:

<RelativeLayout 
android:layout_width="match_parent"
android:layout_height="match_parent" ... >

 <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </ListView>

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"   ... />

为您的自定义样式项目列表创建一个布局(布局文件夹中的alarm_item.xml):

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <!-- This is your clock icon -->
    <ImageView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

    <!-- This is your alarm clock name -->

    <TextView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

    <!-- Create imageview and textview for all other needed data -->

</RelativeLayout >

创建一个适配器以使用项目填充列表视图(查看there 了解更多详细信息):

public class AlarmAdapter extends BaseAdapter {

    Context context;
    Arraylist data;
    private static LayoutInflater inflater = null;

    public yourAdapter(Context context, Arraylist  data) {
        // TODO Auto-generated constructor stub
        this.context = context;
        this.data = data;
        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }



    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // Get object from list that contains Alarm data for this view
        // I assume that your alarm data correspond to an object name AlarmData

        AlarmData alarmData = getItem(position)

        View rootView = convertView;
        if (rootView == null)
            rootView = inflater.inflate(R.layout.alarm_item, parent, false);

        TextView alarmClockName= (TextView) rootView.findViewById(R.id.alarm_clock_name);
        ImageView clockIcon = (ImageView ) rootView.findViewById(R.id.alarm_clock_name);

        // Set your data there

       clockIcon.setImageResource(iconRes);
       alarmClockName.setText(alarmData.getName());

        return rootView;
    }
}

最后获取并用 MainActivity 中的项目填充列表视图:

public class AlarmActivity extends Activity {

   // I assume that your alarm data correspond to an object name AlarmData
   // so I define a Arraylist that will contains all alarms to display

    ArrayList<AlarmData> alarmList = new ArrayList<Alarmdata>();     

    ListView listview;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // Get listivew from main layout
        listview = (ListView) findViewById(R.id.listview);

        // Add alarm to display in alarmlist
        alarmList.add(new AlarmData());
        alarmList.add(new AlarmData());

        // Create alarm listview adapter with current context (this) and alarmlist
        AlarmAdapter alarmAdapter = new AlarmAdapter(this, alarmList);

        // Set previous adapter on listview
        listview.setAdapter(alarmAdapter);
    }
}

这只是自定义列表视图适配器的一个简单示例,希望对您有所帮助。

创建此机制后,您只需处理您的项目布局

【讨论】:

  • 好的,所以我不得不编辑 AlarmAdapter 以使那段代码工作,但在主要活动中我无法得到这个 listview.setAdapter(new yourAdapter(this, to work...
  • 我编辑我的答案以添加一些细节,不知道是否足够。 setAdapter 遇到什么错误?
  • alarmList cannot be resolved 是我在编辑代码后得到的。
猜你喜欢
  • 2015-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 2023-04-06
  • 1970-01-01
  • 2011-06-26
相关资源
最近更新 更多