我是Android开发的新手,如果答案对其他人来说显而易见,请道歉......
我想为我的组织创建一个任务跟踪器应用程序,其中任务集通常大致相同。这是一个模型: Project Progress Mockup
模型显示通用任务名称,但真实任务名称将具有不同的任务名称和更多任务名称。
我需要一些帮助来整理布局设计。从概念上讲,这非常简单,但Android中的实现并不是那么简单......
我以为我应该创建一个"任务项目"包含3个视图的类:任务名称的文本视图,进度条&另一个文本视图的百分比。然后我想创建一个这些任务项的数组。
在XML中设置所有这些并不是那么糟糕,但我需要它是动态的,因为它并不总是相同的列表。此外,使用XML有点暴力,因为我需要为此活动中的每个项目提供唯一代码,而不是动态循环遍历列表。
好像我需要一个ScrollView。我在另一篇文章中看到以下声明:
ScrollView是一个FrameLayout,意味着您应该在其中放置一个包含要滚动的全部内容的子项;这个子本身可能是一个具有复杂对象层次结构的布局管理器。经常使用的子项是垂直方向的LinearLayout,呈现用户可以滚动的顶级项目的垂直数组。
所以我理解我需要将我的任务项列表添加到类似于LinearLayout的内容中,该内容嵌入在ScrollView中。 我可以简单地用XML设置,对吧?
然后,对于每个任务项,我需要: - 创建2个TextView - 将文本设置为任务名称&百分比,分别 - 设置字体,字体大小,文本颜色等。 - 设置TextView位置 - 创建进度条 - 设置进度条位置&百分比
这些都不是微不足道的。所以我想知道为单个任务项设置XML布局会更容易吗?然后以某种方式加载()XML布局。希望从那里我可以简单地设置文本&进度条百分比。 这会起作用吗,还是我错了?另外,我如何为此设置XML?我是否将活动添加到项目中,或者只添加其他XML文件?
最后,我需要任务名称可点击,这样我就可以捕获点击和放大打开一个新活动,显示任务的子任务&允许用户更改状态。因此,任务名称TextView需要具有ID。 我应该创建任务名称按钮而不是TextViews吗?如何动态设置ID?我看到Views有一个setId(int id)方法。但是我怎么知道要使用什么整数? Android参考View.html声明:
视图ID在整个树中不一定是唯一的,但它很好 实践,以确保它们至少在部分内是独一无二的 你正在寻找的树。
如何确保这些ID是唯一的?
在XML文件中,ID不是数字,而是文本,例如:
android:id="@+id/my_button"
这在以下代码中引用:
Button myButton = findViewById(R.id.my_button);
但我如何创建&使用唯一的数字ID来捕获这些任务名称上的点击事件?
新信息&问题...
我的基本功能有用,但有些事情并不合适:
我的布局xml如下所示:
<android.support.constraint.ConstraintLayout
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:id="@+id/summary"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorBG"
tools:ignore="LabelFor"
tools:context="com.myorg.myapp.ProjSummary">
<TextView
android:id="@+id/txtSumm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/summ"
android:textAppearance="@style/TextAppearance.AppCompat"
android:textColor="@color/colorPrimaryDark"
android:textSize="18sp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toTopOf="@+id/txtProj"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"/>
<TextView
android:id="@+id/txtProj"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/proj"
android:textAppearance="@style/TextAppearance.AppCompat"
android:textColor="@color/colorPrimaryDark"
app:layout_constraintTop_toBottomOf="@+id/txtSumm"
android:layout_marginTop="8dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@+id/edtProj"/>
<EditText
android:id="@+id/edtProj"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:paddingTop="5dp"
android:paddingBottom="0dp"
android:paddingStart="0dp"
android:paddingEnd="0dp"
android:textColor="@color/colorPrimaryDark"
android:textSize="14sp"
app:layout_constraintTop_toBottomOf="@+id/txtSumm"
app:layout_constraintLeft_toRightOf="@+id/txtProj"
app:layout_constraintRight_toRightOf="parent"/>
<ImageView
android:id="@+id/imgLogo"
android:layout_width="120dp"
android:layout_height="48dp"
android:scaleType="fitXY"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@+id/btnSend"
app:srcCompat="@mipmap/my_logo"
android:contentDescription="@string/org_logo"/>
<Button
android:id="@+id/btnSend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:backgroundTint="@color/colorSecondaryDark"
android:text="@string/send"
android:textColor="@color/colorButtonText"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toRightOf="@+id/imgLogo"
app:layout_constraintRight_toRightOf="parent"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/rvTaskList"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/txtProj"
app:layout_constraintBottom_toTopOf="@+id/imgLogo"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"/>
我的上一个任务项永远不会显示。 (例如,如果我有10个任务项,则只显示前9个。)在我的活动类中,我有一个ArrayList用于任务项的摘要列表:
private ArrayList _alSummaries;
在我的RecyclerView.Adapter类中,我有以下方法:
@Override
public int getItemCount() { return _alSummaries.size(); }
我应该看的其他地方吗?
进一步更新:
android:layout_height="wrap_content"
而不是wrap_content,它应该是&#34; 0dp&#34;。看起来像是Android中的一个错误,实际上 - 如果我说的是wrap_content,那绝不会导致视图变得比可用的空间大(由约束设置)。
答案 0 :(得分:1)
所以我想知道为单个任务项设置XML布局会更容易吗?然后以某种方式加载()XML布局。希望从那里我可以简单地设置文本&amp;进度条百分比。
这是Recycler View适配器的功能。您有一个包含三个简单视图的xml布局:文本,条形图和另一个文本。
现在在您的代码中(在适配器中),您可以为每一行充气并单独设置文本和进度条。
我应该创建任务名称按钮而不是TextViews吗?如何动态设置ID?
你不需要这样做。您可以只分配自定义onClick侦听器,它们可以在适配器代码中执行您想要的操作。
对于初学者来说,设置绝对不是一件容易的事,但是一旦掌握了它,你会发现它是一个非常有价值的工具。
在这里查看官方教程:https://developer.android.com/training/material/lists-cards.html