以编程方式添加按钮在 API 级别 23 中不起作用。我需要动态生成按钮。我该如何添加它们?
Posted
技术标签:
【中文标题】以编程方式添加按钮在 API 级别 23 中不起作用。我需要动态生成按钮。我该如何添加它们?【英文标题】:Adding buttons programmatically is not working in API level 23. I need the buttons to be dynamically generated. How do I add them? 【发布时间】:2016-09-18 08:24:36 【问题描述】:以下是向 LinearLayout 动态添加按钮的代码:
private void createAndAddButton()
LinearLayout top_row = (LinearLayout)findViewById(R.id.act1toprow);
// Check if Linear Layout is already populated
if((top_row).getChildCount() > 0)
( top_row).removeAllViews();
// Create an ArrayList to hold the Button objects that we will create
final ArrayList<ToggleButton> buttonList = new ArrayList<ToggleButton>();
final ToggleButton b = new ToggleButton(this);
b.setGravity(Gravity.CENTER_HORIZONTAL);
b.setId((int)Math.random());
b.setTextOff("");
b.setTextOn("");
b.setBackgroundDrawable(null);
Drawable drawable = ContextCompat.getDrawable(this, R.drawable.button0);
b.setText(null);
b.setTextOn(null);
b.setTextOff(null);
drawable.setBounds(0, 0, (int) (50 * this.getResources().getDisplayMetrics().density), (int) (50 * this.getResources().getDisplayMetrics().density));
ScaleDrawable sd = new ScaleDrawable(drawable, 0, 100, 100);
b.setCompoundDrawablesWithIntrinsicBounds(sd.getDrawable(), null, null, null);
b.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
dealWithButtonClick(b);
);
buttonList.add(b);
top_row.addView(buttonList.get(0));
以下是我的视图 XML:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
android:id="@+id/activity_main"
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:layout_
android:layout_
tools:context="ritikasood.testapp.MainActivity">
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/togglecard_view"
android:layout_gravity="center"
android:layout_
android:layout_
card_view:cardCornerRadius="4dp"
android:backgroundTint="@color/lime"
android:layout_marginTop="20dp"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:layout_marginRight="@dimen/activity_horizontal_margin">
<LinearLayout android:layout_
android:layout_
android:id="@+id/act1toprow"
android:gravity="center"
android:backgroundTint="@color/purple"
android:orientation="horizontal"
android:layout_marginTop="20dp"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true">
</LinearLayout>
</android.support.v7.widget.CardView>
</android.support.constraint.ConstraintLayout>
没有运行时错误。应用程序正常启动。
我调试了这段代码,它运行时没有问题,但我仍然看不到视图上的按钮。
【问题讨论】:
【参考方案1】:ScaleDrawable
的初始级别为 0,不会绘制任何内容。您需要设置一个初始级别。
【讨论】:
感谢您的回答,我在调用 setCompoundDrawablesWithIntrinsicBounds() 之前做了一个 sd.SetLevel(10000)。这并没有解决问题。以上是关于以编程方式添加按钮在 API 级别 23 中不起作用。我需要动态生成按钮。我该如何添加它们?的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式创建 UIView 在 Xcode 11.1 中不起作用
ios UIViewController以编程方式定位按钮不起作用
UIButton 的 Swift addTarget 在 UIView 中不起作用
在 API 级别 24 中不推荐使用 DatePicker 上的 setSpinnersShown 和 setCalendarViewShown