如何在 Android 中使用相对布局在另一个视图下显示一个视图(例如文本视图),但前提是有文本 - 即不为空

How, in Android, using relative layout, display a view (example textview) under another one, but only if has text - i.e. not empty

假设,使用相对布局,在第一行我显示一个日期文本字段,然后在它旁边显示一个项目文本视图,然后我想在项目文本视图下方显示一个描述文本视图,但前提是说明不为空。有没有"conditional"属性可以用的?我们怎么能这样做?

谢谢!

任何框架视图都没有这样的条件属性。

一个简单的方法是在您的 Java 代码中这样做:

String description;
TextView descriptionView;

if (TextUtils.isEmpty(description)) {
    descriptionView.setVisibility(View.GONE);
} else {
    descriptionView.setText(description);
    descriptionView.setVisibility(View.VISILBE);
}

当有内容要显示时,您可以将 TextView 放置在您希望它位于布局中的任何位置,而当没有内容要显示时,只需将其隐藏。

textview 上有一个属性可让您控制其可见性。 在 xml:

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/dependentTextViewId"
        android:visibility="invisible"
        />

然后在您的 activity java 中,您可以根据侦听器或其他条件将其设置为可见

TextView tv = (TextView) myView.findViewById(R.id.dependentTextViewId);
            tv.setVisibility(View.VISIBLE);
//Thanks to Tanis for providing the answer on conditionally hiding a TextView
//So the complete solution is to create a custom SimpleAdapter:
public class JournalDisplayListAdapter extends SimpleAdapter {
//--- some code skipped here
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = super.getView(position, convertView, parent);
    TextView activityGroupName;
    TextView activityDescription;
    if (row != null) {
        activityGroupName = (TextView) row.findViewById(R.id.activityGroupName);
       if (TextUtils.isEmpty(activityGroupName.getText())){
            activityGroupName.setVisibility(View.GONE);
       } else {
            activityGroupName.setVisibility(View.VISIBLE);   
         }
        activityDescription = (TextView) row.findViewById(R.id.activityDescription);
       if (TextUtils.isEmpty(activityDescription.getText())){
           activityDescription.setVisibility(View.GONE);
       }else {
            activityDescription.setVisibility(View.VISIBLE);   
         }
}

return row;

}