我正在进行一个测试项目,以便在我开始处理项目之前练习android布局的一些基本功能。 现在我正在经历一些按钮和活动的变化,并且堆积了一个令人沮丧的问题。
起初我不知道为什么我的新布局不会显示我放在它上面的一些按钮,但现在问题变得更加怪异了。 我将很快在我的代码中显示,我有两个布局xml文件,一个用于处理主要活动,另一个用于处理第二个。起初一切都很好,但后来我注意到我看不到第二个布局上的孤独按钮,我无法理解为什么。我试图将第二个布局更改为主要布局(只是我在主活动中更改了setContentView()),但奇怪的是,程序一直调用原始布局而不是代码中指定的布局(当然我检查错误,或者如果它确实已经构建,它确实,我也故意插入错误并检查程序无法启动)。 看到可能存在一些更深层次的问题,我试图在主布局xml文件中添加另一个按钮,但是对于没有小瓶,程序一直以旧版本开头。
我已经搜索了答案,试图清理我的项目,并重建它,在我的字符串xml中查找丢失的文件,但没有任何东西可以修复它,我现在对于出了什么问题一无所知。
我确实假设如果我重新开始项目,一切都会好的,但每次问题上升时我都无法启动新项目。 (特别是如果我做错了什么)。
这是我的代码:
主要活动: $ package test.android.mark.III;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.PopupWindow;
public class AndroidMarkIII extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
final Button button1 = (Button) findViewById(R.id.button1); // bind button to the view from the xml
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
openNewWindow(v);
}
});
final Button button2 = (Button) findViewById(R.id.button2);// bind button to the view from the xml
button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
openPopupWindow(button2);
}
});
}
protected void openNewWindow(View v) {
Intent listWindowIntent = new Intent(v.getContext(), ListWindowActivity.class);
startActivityForResult(listWindowIntent, 0);
}
}
我的第二项活动: package test.android.mark.III;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class ListWindowActivity extends Activity {
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
Button returnButton = (Button) findViewById(R.id.return_button);
returnButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
setResult(RESULT_OK, intent);
finish();
}
});
}
}
我的主要XML文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="@+id/title1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/title1"
android:layout_centerHorizontal="true" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/title1"
android:layout_centerHorizontal="true"
android:text="@string/push_button"
android:padding="50dp" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/button1"
android:text="@string/popup_button"
android:layout_centerHorizontal="true"
android:padding="75dp" />
<TextView //Was added later for check reason (wasn't seen on any run)
android:id="@+id/end"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/title1"
android:layout_centerHorizontal="true"/>
</RelativeLayout>
我的第二个XML(第二个活动)
<TextView
android:id="@+id/list_text"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="Hello World" />
<Button
android:id="@+id/return_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/return_button"
android:visibility="visible">
</Button>
</LinearLayout>
,无论如何,我的字符串xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, AndroidMarkIIIActivity!</string>
<string name="app_name">AndroidMarkIII</string>
<string name="title1">This is a test program</string>
<string name="push_button">Push Button - 50dp</string>
<string name="popup_button">Popup Button - 75dp</string>
<string name="return_button">return Button - 10dp</string>
<string name="close_popup_button">X</string>
<string name="popup_text">this is popup - 25dp</string>
<string name="list_window_app_name">AndroidMarkIII2ndWindow</string>
</resources>
和我最好的xml
<uses-sdk android:minSdkVersion="14" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:label="@string/app_name"
android:name=".AndroidMarkIII" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ListWindowActivity">
</activity>
</application>
</manifest>
我真的希望有人能够解决这个问题,因为它看起来实际上是一个非常愚蠢的问题,但是,在我拥有它的时候仍然无法继续工作。
提前致谢 奥伦
答案 0 :(得分:1)
问题出现是因为您的XML布局不正确。
在main1.xml
中您使用的是RelativeLayout
,因此您必须告诉每个视图相对于其他视图的位置,或ViewGroup
本身。尝试将android:layout_below="@id/button2"
添加到TextView
中的最后一个main1.xml
。
正如@alextsc指出的那样,在main2.xml
中,您告诉TextView
使用fill_parent
填充整个屏幕。将高度更改为wrap_content
,并将android:orientation="vertical"
父级中的LinearLayout
设为the default is horizontal
。
答案 1 :(得分:0)
起初一切都很好,但后来我注意到我看不到第二个布局上的单个按钮,我无法理解为什么。
首先,您的第二个活动的XML似乎不完整。您至少在这里缺少开头的LinearLayout。我认为这是存在的,并没有更多的遗漏(可能只是一个复制和粘贴错误)。
你所做的是在宽度和高度都设置为fill_parent
的TextView。您无法看到按钮的原因是它没有剩余空间。 textview完全填充父LinearLayout (如果你想要显示它,将android:background="#ff0000"
添加到textview。它的背景变成红色并填满屏幕)。对于初学者,您可以将文本视图的宽度和高度更改为wrap_content
,这样可以使按钮可见。如果您想要两者的特定布局分布,请查看LinearLayouts权重属性。
当涉及到不变的布局时:我不确定这里发生了什么。确保您的XML名为main1.xml
和main2.xml
。还有一个名为main.xml
的默认布局文件。确保您没有意外编辑。 (听起来你已经把这部分包含在内,只是为了绝对确定)