好吧,我要抓狂了。
我的主要 Activity 有一个简单的默认相对布局 XML,并在 XML 中定义了 LinearLayout。在我的 Java 代码中,我添加了一个 LinearLayout 行,方向水平,并将其添加到 XML Linearlayout(我通过 ID 找到的)。然后,当我将按钮或 TextView 添加到该图层行时,它们完美地显示了。
但是,当我尝试在另一个 Activity 中执行相同的操作时,我根本无法显示 TextView 或 Button。我最初有一个背景图像,并尝试将我的 Buttons 和 TextView 直接添加到根relativelayout (foundById),并计划通过 .setX 和 .setY 移动它们,但我拿走了背景并恢复为引用特定的 Linearlayout,比如我的主要 Activity (出于测试目的,以消除任何异常),但它仍然不会显示它们。我已经重新安排并永远测试了,但看不到我错过了什么。
这是我当前的 XML(为了测试而进行了精简):
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_open_template"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.mystuff.stupidapp.OpenTemplateActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/openTemplateMain">
</LinearLayout>
</RelativeLayout>
...这是当前的代码(也被精简):
public class OpenTemplateActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_open_template);
final Resources res = getResources();
Intent intent = getIntent();
String fileName = intent.getStringExtra(MainActivity.EXTRA_FILENAME);
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int screenHeight = displaymetrics.heightPixels;
int screenWidth = displaymetrics.widthPixels;
LinearLayout.LayoutParams rowLayoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT, 1.0f);
LinearLayout llMain = new LinearLayout(this);
llMain.setOrientation(LinearLayout.HORIZONTAL);
LinearLayout llMainParent = (LinearLayout) findViewById(R.id.openTemplateMain);
llMainParent.addView(llMain);
Button bTest = new Button(this);
bTest.setText("TESTB");
llMain.addView(bTest);
//other code below unrelated.
}
}
有什么想法吗?请问?
最佳答案
为有类似问题的人回答我自己的问题: 结果 APK 被卡住了,但只是代码被卡住了。这意味着当我点击“播放”或“调试”时,对 XML 模板的任何更改(添加/删除文本或按钮或背景)都会反射(reflect)在测试设备上。但对代码的任何更改都不会反射(reflect)出来。当我更改调试日志记录中的标签时,我注意到了这一点,并且它们没有反射(reflect)在日志中。我还注意到一个类似于 Toast 的弹出窗口显示了有关该应用程序被手动关闭并通过 IDE 重新运行的内容,但它没有停留足够长的时间来仔细查看。
清除缓存和数据,卸载应用程序,然后通过IDE播放重新启动,解决了问题。代码更改现在已按预期得到反射(reflect),并且代码创建的 View 也已显示。
关于java - 安卓 Java : Buttons and TextViews not showing up when added via Java (to existing XML layout),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41092785/