0
我在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();
请发布[mcve]。所有的代码应该编译没有错误,而不是你所问的。特别是,你的代码都不在一个类中。 –
也发布你的linearlayout xml – yanivtwin
在'setTextSize()'之后调用'requestLayout()'。 – azizbekian