我在LinearLayout
放了一堆按钮,每个按钮weight=1
。问题是,当setTextSize
被调用时,它有时会改变绘制背景的空间(因此,如果新文本大小较小,则一个按钮感知所有其他按钮的高度FE 2/3) 。即使绘制的大小发生变化,也永远不会调用onSizeChanged
。该按钮不会改变它的位置(由getLocationInWindow调试)也不会改变它的大小(getWidth,getHeight)。
我做错了什么,或者至少有办法解决它?
MainActivity:
import android.app.ActionBar;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
public class MainActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewGroup mainLayout = (ViewGroup)findViewById(R.id.mainLayout);
LinearLayout l = new LinearLayout(this);
mainLayout.addView(l);
for (int i = 0; i < 8; i++) {
Button b = new Button(this);
LinearLayout.LayoutParams p1 = new LinearLayout.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT, 200);
p1.weight = 1;
b.setLayoutParams(p1);
b.setBackgroundColor(Color.YELLOW);
l.addView(b);
}
Button b = ((Button)l.getChildAt(7));
b.setTextSize(50f);
}
}
为了它的全部,XML:
<?xml version="1.0" encoding="utf-8"?>
<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/mainLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="dracek.fit.cvut.cz.test.MainActivity">
</android.support.constraint.ConstraintLayout>
我尝试了所有这些按钮,但没有改变:
requestLayout();
invalidate();
ViewParent vp = getParent();
if (vp != null)
vp.requestLayout();
答案 0 :(得分:0)
如果没有其他人这样做,我会回答自己。
最后我发现,LinearLayout无论出于什么原因试图让所有文本基线处于相同的高度,从而移动按钮。添加一行可以解决问题:
p1.gravity =Gravity.FILL;