我尝试在layout_marginTop
水平gravity=bottom
内添加LinearLayout
设置和<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ff0000"
android:orientation="horizontal">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginTop="8dp"
android:background="#0000ff"
android:textSize="24sp"
android:text="TEST"/>
</LinearLayout>
视图,并且无缘无故导致边距显示在底部。
我知道这种布局可能会有所不同,但我无法理解为什么我会得到这样的结果。
这是xml布局:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
mViewFlipper = (ViewFlipper) rootView.findViewById(R.id.view_flipper);
mViewFlipper.setAutoStart(true);
mViewFlipper.setFlipInterval(4000);
Random mRandom = new Random();
mViewFlipper.setDisplayedChild(mRandom.nextInt(400));
mViewFlipper.startFlipping();
结果如下:
有这个想法吗?
答案 0 :(得分:2)
在深入研究源代码之后,似乎这种行为的根本原因是LinearLayout
默认情况下它的子行View
与其基线对齐。当它计算出孩子View
的垂直偏移时,它会考虑sum of the vertical margins。然后,这些offsets将after the "normal" top (y) coordinates are calculated应用于子View
。
所有这一切的结果是,如果您希望TextView
在底部对齐,请将LinearLayout
的{{1}}属性设置为baselineAligned
。
false
答案 1 :(得分:0)
TextView设置有自己的LAYOUT GRAVITY到底部,即TextView的整个主体与底部对齐,如果方向是水平的,它将没有区别,因为它是linearLayout它不适用于marginTop当layoutGravity的视图是设置为Bottom,删除layoutGravity并保持marginTop它将接近上面提到的边距。!
为什么不在基础上。? 因为你给它一个余量,当你给它一些值时,如果你已经给它布局了底部,那么它就是底部对齐并从中给出边距。!
希望我帮助你,如果不完全的话。