Android 当一个文本视图消失时,如何将两个文本视图居中?
我使用了两个Android 当一个文本视图消失时,如何将两个文本视图居中?,android,xml,android-layout,Android,Xml,Android Layout,我使用了两个TextViews来显示联系人姓名和公司名称,使用数据绑定技术一个接一个地显示。公司名称是可选字段,因此它可以消失 1.我一直在item\u contact.xml中使用这种方法: <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <import type="android.view.View"/> <variable
TextView
s来显示联系人姓名和公司名称,使用数据绑定技术一个接一个地显示。公司名称是可选字段,因此它可以消失
1.我一直在item\u contact.xml中使用这种方法:
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<import type="android.view.View"/>
<variable
name="info"
type="com.myproject.objects.InfoObject"/>
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="70dp">
<TextView
android:id="@+id/item_contact_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="32dp"
android:layout_marginStart="32dp"
android:layout_centerVertical="true"
android:text='@{info.getAccountName() == null ? info.getName() : String.format(@string/item_meeting_time_period, info.getName(), info.getAccountName() )}'
android:textSize="16sp"
android:textColor="@color/black"
/>
<include layout="@layout/bottom_line_divider" />
</RelativeLayout>
</layout>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<import type="android.view.View"/>
<variable
name="info"
type="com.myproject.objects.InfoObject"/>
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="70dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical"
>
<TextView
android:id="@+id/item_contact_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="32dp"
android:layout_marginStart="32dp"
android:text="@{info.getName()}"
android:textSize="16sp"
android:textColor="@color/black"
/>
<TextView
android:id="@+id/item_contact_accountName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="32dp"
android:layout_marginStart="32dp"
android:layout_marginTop="5dp"
android:text="@{info.getAccountName()}"
android:textColor="@color/gray"
android:textSize="12sp"
android:textAppearance="@android:style/TextAppearance.DeviceDefault.Widget.ActionMode.Subtitle"
android:visibility="@{info.getAccountName().isEmpty() ? View.GONE : View.VISIBLE}"
android:background="@color/blue"
/>
</LinearLayout>
<include layout="@layout/bottom_line_divider" />
</RelativeLayout>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<import type="android.view.View"/>
<variable
name="info"
type="fi.lunni.mobileadvisor.ui.objects.InfoObject"/>
<variable
name="handler"
type="fi.lunni.mobileadvisor.ui.adapters.ContactsAdapter"/>
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="70dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical"
android:gravity="center_vertical"
>
<TextView
android:id="@+id/item_contact_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="32dp"
android:layout_marginStart="32dp"
android:text="@{info.getName()}"
android:textSize="16sp"
android:textColor="@color/black"
android:layout_gravity="@{info.getAccountName().length() > 0 }"
/>
<TextView
android:id="@+id/item_contact_accountName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="32dp"
android:layout_marginStart="32dp"
android:layout_marginTop="5dp"
android:text="@{info.getAccountName()}"
android:textColor="@color/gray"
android:textSize="12sp"
android:textAppearance="@android:style/TextAppearance.DeviceDefault.Widget.ActionMode.Subtitle"
android:visibility="@{info.getAccountName().length() > 0 ? View.VISIBLE : View.GONE }"
/>
</LinearLayout>
<include layout="@layout/bottom_line_divider" />
</RelativeLayout>
@BindingAdapter("android:layout_gravity")
public static void setLayoutGravity(TextView view, boolean belowViewExists){
if(view.getId() == R.id.item_contact_name){
Log.d(TAG, "setLayoutVertical() " + belowViewExists);
if(!belowViewExists) {
final LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams)
view.getLayoutParams();
layoutParams.gravity = Gravity.CENTER_VERTICAL;
layoutParams.height = WindowManager.LayoutParams.MATCH_PARENT;
view.setLayoutParams(layoutParams);
}
}
}
但是在这种情况下,如果第二个文本视图
消失了,第一个文本视图仍将呈现在线性布局的顶部
,因为它假设第二个视图可以可见
问题:如果第二个TextView不可见,如何使第一个TextView垂直集中;如果第二个TextView可见,如何使这两个TextView都集中?这是一个完美的使用案例。
它对“缺少”视图的支持要好得多。这是一个很好的使用案例。
它对“缺失”视图的支持要好得多。使用
android:gravity
。这将对齐容器内的子对象
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical"
android:gravity="center_vertical"
>
使用
android:gravity
。这将对齐容器内的子对象
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical"
android:gravity="center_vertical"
>
尝试使用此
<TextView
android:id="@+id/item_contact_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="32dp"
android:layout_marginStart="32dp"
android:text="@{info.getName()}"
android:textSize="16sp"
android:gravity="center_vertical"
android:textColor="@color/black" />
希望这能有所帮助。试着用这个
<TextView
android:id="@+id/item_contact_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="32dp"
android:layout_marginStart="32dp"
android:text="@{info.getName()}"
android:textSize="16sp"
android:gravity="center_vertical"
android:textColor="@color/black" />
希望这有帮助。好的,总结一下。最后,我已经完成了所有工作,并且它按照我的要求工作,因此,如果只有一个
TextView
可见,那么它就是集中式垂直视图,或者如果两个TextView
s可见,那么它们都是居中的
item_contact.xml:
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<import type="android.view.View"/>
<variable
name="info"
type="com.myproject.objects.InfoObject"/>
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="70dp">
<TextView
android:id="@+id/item_contact_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="32dp"
android:layout_marginStart="32dp"
android:layout_centerVertical="true"
android:text='@{info.getAccountName() == null ? info.getName() : String.format(@string/item_meeting_time_period, info.getName(), info.getAccountName() )}'
android:textSize="16sp"
android:textColor="@color/black"
/>
<include layout="@layout/bottom_line_divider" />
</RelativeLayout>
</layout>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<import type="android.view.View"/>
<variable
name="info"
type="com.myproject.objects.InfoObject"/>
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="70dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical"
>
<TextView
android:id="@+id/item_contact_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="32dp"
android:layout_marginStart="32dp"
android:text="@{info.getName()}"
android:textSize="16sp"
android:textColor="@color/black"
/>
<TextView
android:id="@+id/item_contact_accountName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="32dp"
android:layout_marginStart="32dp"
android:layout_marginTop="5dp"
android:text="@{info.getAccountName()}"
android:textColor="@color/gray"
android:textSize="12sp"
android:textAppearance="@android:style/TextAppearance.DeviceDefault.Widget.ActionMode.Subtitle"
android:visibility="@{info.getAccountName().isEmpty() ? View.GONE : View.VISIBLE}"
android:background="@color/blue"
/>
</LinearLayout>
<include layout="@layout/bottom_line_divider" />
</RelativeLayout>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<import type="android.view.View"/>
<variable
name="info"
type="fi.lunni.mobileadvisor.ui.objects.InfoObject"/>
<variable
name="handler"
type="fi.lunni.mobileadvisor.ui.adapters.ContactsAdapter"/>
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="70dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical"
android:gravity="center_vertical"
>
<TextView
android:id="@+id/item_contact_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="32dp"
android:layout_marginStart="32dp"
android:text="@{info.getName()}"
android:textSize="16sp"
android:textColor="@color/black"
android:layout_gravity="@{info.getAccountName().length() > 0 }"
/>
<TextView
android:id="@+id/item_contact_accountName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="32dp"
android:layout_marginStart="32dp"
android:layout_marginTop="5dp"
android:text="@{info.getAccountName()}"
android:textColor="@color/gray"
android:textSize="12sp"
android:textAppearance="@android:style/TextAppearance.DeviceDefault.Widget.ActionMode.Subtitle"
android:visibility="@{info.getAccountName().length() > 0 ? View.VISIBLE : View.GONE }"
/>
</LinearLayout>
<include layout="@layout/bottom_line_divider" />
</RelativeLayout>
@BindingAdapter("android:layout_gravity")
public static void setLayoutGravity(TextView view, boolean belowViewExists){
if(view.getId() == R.id.item_contact_name){
Log.d(TAG, "setLayoutVertical() " + belowViewExists);
if(!belowViewExists) {
final LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams)
view.getLayoutParams();
layoutParams.gravity = Gravity.CENTER_VERTICAL;
layoutParams.height = WindowManager.LayoutParams.MATCH_PARENT;
view.setLayoutParams(layoutParams);
}
}
}
好的,总结一下。最后,我已经完成了所有工作,并且它按照我的要求工作,因此,如果只有一个
TextView
可见,那么它就是集中式垂直视图,或者如果两个TextView
s可见,那么它们都是居中的
item_contact.xml:
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<import type="android.view.View"/>
<variable
name="info"
type="com.myproject.objects.InfoObject"/>
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="70dp">
<TextView
android:id="@+id/item_contact_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="32dp"
android:layout_marginStart="32dp"
android:layout_centerVertical="true"
android:text='@{info.getAccountName() == null ? info.getName() : String.format(@string/item_meeting_time_period, info.getName(), info.getAccountName() )}'
android:textSize="16sp"
android:textColor="@color/black"
/>
<include layout="@layout/bottom_line_divider" />
</RelativeLayout>
</layout>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<import type="android.view.View"/>
<variable
name="info"
type="com.myproject.objects.InfoObject"/>
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="70dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical"
>
<TextView
android:id="@+id/item_contact_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="32dp"
android:layout_marginStart="32dp"
android:text="@{info.getName()}"
android:textSize="16sp"
android:textColor="@color/black"
/>
<TextView
android:id="@+id/item_contact_accountName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="32dp"
android:layout_marginStart="32dp"
android:layout_marginTop="5dp"
android:text="@{info.getAccountName()}"
android:textColor="@color/gray"
android:textSize="12sp"
android:textAppearance="@android:style/TextAppearance.DeviceDefault.Widget.ActionMode.Subtitle"
android:visibility="@{info.getAccountName().isEmpty() ? View.GONE : View.VISIBLE}"
android:background="@color/blue"
/>
</LinearLayout>
<include layout="@layout/bottom_line_divider" />
</RelativeLayout>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<import type="android.view.View"/>
<variable
name="info"
type="fi.lunni.mobileadvisor.ui.objects.InfoObject"/>
<variable
name="handler"
type="fi.lunni.mobileadvisor.ui.adapters.ContactsAdapter"/>
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="70dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical"
android:gravity="center_vertical"
>
<TextView
android:id="@+id/item_contact_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="32dp"
android:layout_marginStart="32dp"
android:text="@{info.getName()}"
android:textSize="16sp"
android:textColor="@color/black"
android:layout_gravity="@{info.getAccountName().length() > 0 }"
/>
<TextView
android:id="@+id/item_contact_accountName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="32dp"
android:layout_marginStart="32dp"
android:layout_marginTop="5dp"
android:text="@{info.getAccountName()}"
android:textColor="@color/gray"
android:textSize="12sp"
android:textAppearance="@android:style/TextAppearance.DeviceDefault.Widget.ActionMode.Subtitle"
android:visibility="@{info.getAccountName().length() > 0 ? View.VISIBLE : View.GONE }"
/>
</LinearLayout>
<include layout="@layout/bottom_line_divider" />
</RelativeLayout>
@BindingAdapter("android:layout_gravity")
public static void setLayoutGravity(TextView view, boolean belowViewExists){
if(view.getId() == R.id.item_contact_name){
Log.d(TAG, "setLayoutVertical() " + belowViewExists);
if(!belowViewExists) {
final LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams)
view.getLayoutParams();
layoutParams.gravity = Gravity.CENTER_VERTICAL;
layoutParams.height = WindowManager.LayoutParams.MATCH_PARENT;
view.setLayoutParams(layoutParams);
}
}
}
不幸的是,这没有帮助。我想这是因为我正在使用数据绑定。不幸的是,它没有帮助。我想这是因为我在使用数据绑定。