#android #dynamic #button
#Android #динамический #кнопка
Вопрос:
Мой вопрос очень прост, я пытаюсь динамически изменять ширину этой кнопки :
<Button>
android:layout_height="35dip"
android:background="@drawable/buttonlesson"
android:text="Level 3 [TAP HERE]"
android:onClick="MenuLI1L3"
android:layout_width="300dp"
android:id="@ id/II3"
</Button>
Вот код, который я использую :
Button myButton = (Button) findViewById(R.id.II3);
myButton.setWidth(10);
myButton.setText("kl");
Текст действительно меняется, но не ширина. Похоже, что это ошибка.
Справа от нее есть другая кнопка, которая, как предполагается, заполняет пробел, когда эта кнопка уменьшается до 10 пикселей, поэтому я также не могу изменить LinearLayout выше.
Есть какие-либо объяснения и решения? Это не должно работать? Спасибо
Ответ №1:
Я предполагаю, что wrap_content не работает для вашего в вашем конкретном случае, верно? Если вам нужна абсолютная ширина, то вам нужно назначить ее с помощью новых LayoutParameters, т.Е.
myButton.setLayoutParams(new LinearLayout.LayoutParams(
30 * someDensityFactor, LinearLayout.LayoutParams.WRAP_CONTENT
))
где someDensityFactor — это ваша плотность экрана (с плавающей точкой). Вам также может потребоваться сделать недействительным ваш макет, чтобы перекрасить кнопку.
Ответ №2:
В качестве предложения попробуйте вызвать invalidate() в родительском представлении (что вызовет вызовы рисования для всех дочерних элементов, включая вашу кнопку). Это может не сработать, потому что вам также нужно, чтобы кнопка повторно запустила свою логику onMeasure () (которая выполняется перед рисованием).
Поиграйте либо с недействительным, либо с любым другим методом, который заставит родительский вызвать onMeasure дочерних элементов.
Комментарии:
1. Спасибо за предложение! invalidate() на слое или на кнопке ничего не сделал, хотя …. но MyButton.BringToFront(); каким-то образом сработал.
2. Я не играл с BringToFront (), но я не могу не задаться вопросом, заставляет ли это кнопку запускать свою onMeasure ()? Что ж, по крайней мере, ты встал и работаешь. Отлично сделано.