在Android中动态单击按钮添加微调器

古人已用三冬足,年少今开万卷余。这篇文章主要讲述在Android中动态单击按钮添加微调器相关的知识,希望能为你提供帮助。
我试图通过使用以下代码动态地将微调器添加到我的应用程序:

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); startTime = (EditText)findViewById(R.id.EditTextST); startDate = (EditText)findViewById(R.id.editTextSD); LinearLayout linearlayout = new LinearLayout(this); //RelativeLayout linearlayout = (RelativeLayout)findViewById(R.id.main_layout); ArrayList< String> spinnerArray = new ArrayList< String> (); spinnerArray.add("one"); spinnerArray.add("two"); spinnerArray.add("three"); spinnerArray.add("four"); spinnerArray.add("five"); Spinner spinner = new Spinner(this); ArrayAdapter< String> spinnerArrayAdapter = new ArrayAdapter< String> (this,android.R.layout.simple_spinner_dropdown_item, spinnerArray); spinner.setAdapter(spinnerArrayAdapter); linearlayout.addView(spinner); setContentView(linearlayout); }

这会添加微调器,但用动态创建的微调器替换我在XML中的所有内容。我想通过单击按钮将微调器添加到布局(我使用XML创建),而不是替换布局。请帮忙。
编辑:这是我的XML文件
< ?xml version="1.0" encoding="utf-8"?> < ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" > < RelativeLayout android:id="@+id/main_layout" android:layout_width="match_parent" android:layout_height="900dp" > < TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:text="@string/select_week" android:textAppearance="?android:attr/textAppearanceMedium" /> < CheckBox android:id="@+id/checkBox1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/textView1" android:text="@string/sun" /> < CheckBox android:id="@+id/checkBox2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/checkBox1" android:layout_alignBottom="@+id/checkBox1" android:layout_toRightOf="@+id/checkBox1" android:text="@string/mon" /> < CheckBox android:id="@+id/checkBox3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/checkBox2" android:layout_toRightOf="@+id/checkBox2" android:text="@string/tue" /> < CheckBox android:id="@+id/checkBox4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/checkBox3" android:layout_alignBottom="@+id/checkBox3" android:layout_toRightOf="@+id/checkBox3" android:text="@string/wed" /> < CheckBox android:id="@+id/checkBox5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/checkBox1" android:layout_toLeftOf="@+id/checkBox2" android:text="@string/thu" /> < CheckBox android:id="@+id/checkBox6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/checkBox2" android:layout_below="@+id/checkBox2" android:text="@string/fri" /> < CheckBox android:id="@+id/checkBox7" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/checkBox2" android:layout_toRightOf="@+id/checkBox2" android:text="@string/sat" /> < TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/checkBox5" android:layout_marginTop="18dp" android:text="@string/select_week_number" android:textAppearance="?android:attr/textAppearanceMedium" /> < CheckBox android:id="@+id/CheckBox01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/checkBox02" android:layout_alignBottom="@+id/checkBox02" android:layout_alignLeft="@+id/checkBox5" android:text="@string/one" /> < CheckBox android:id="@+id/CheckBox03" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/checkBox02" android:layout_alignBottom="@+id/checkBox02" android:layout_toRightOf="@+id/checkBox6" android:text="@string/three" /> < CheckBox android:id="@+id/checkBox02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textView2" android:layout_toRightOf="@+id/checkBox5" android:text="@string/two" /> < CheckBox android:id="@+id/CheckBox04" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/CheckBox03" android:layout_alignBottom="@+id/CheckBox03" android:layout_toRightOf="@+id/textView2" android:text="@string/four" /> < TextView android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/CheckBox01" android:layout_marginTop="16dp" android:text="@string/select_start_date" android:textAppearance="?android:attr/textAppearanceMedium" /> < EditText android:id="@+id/editTextSD" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/CheckBox01" android:layout_below="@+id/TextView01" android:layout_toLeftOf="@+id/CheckBox04" android:ems="10" android:inputType="text|date" android:onClick="showDatePickerDialog" > < requestFocus /> < /EditText> < EditText android:id="@+id/EditTextST" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/editTextSD" android:layout_alignBottom="@+id/editTextSD" android:layout_alignLeft="@+id/CheckBox04" android:ems="10" android:inputType="time" android:onClick="showTimePickerDialog" /> < TextView android:id="@+id/TextView02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/editTextSD" android:layout_below="@+id/editTextSD" android:layout_marginTop="17dp" android:text="@string/select_end_date" android:textAppearance="?android:attr/textAppearanceMedium" /> < EditText android:id="@+id/EditText01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/TextView02" android:layout_alignRight="@+id/editTextSD" android:layout_below="@+id/TextView02" android:ems="10" android:inputType="text|date" android:onClick="showDatePickerDialog" /> < EditText android:id="@+id/EditText02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/EditText01" android:layout_alignBottom="@+id/EditText01" android:layout_alignLeft="@+id/EditTextST" android:ems="10" android:inputType="time" android:onClick="showTimePickerDialog" /> < TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/EditText01" android:layout_below="@+id/EditText01" android:layout_marginTop="17dp" android:text="@string/reminder" android:textAppearance="?android:attr/textAppearanceMedium" /> < Spinner android:id="@+id/spinner1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/textView3" android:entries="@array/reminder_times" android:paddingLeft="-10dp" android:gravity="left" tools:listitem="@android:layout/activity_list_item" /> < Button android:id="@+id/button1" style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView3" android:layout_below="@+id/spinner1" android:layout_marginTop="119dp" android:text="@string/add_reminder" /> < /RelativeLayout> < /ScrollView>

答案这就是你所做的
  1. 添加了一个新的LinearLayout。
  2. 在上面的布局中添加了一个微调器。
  3. 然后设置内容视图。
这是我认为可行的。
  1. 您可以使用findViewById(R.id.root_layout)获得根布局。
  2. 现在创建一个spinner。添加项目,就像你在代码中正确执行的那样。
  3. 现在将微调器添加到root_layout
你的错误
您创建了一个新布局并将其设置为主要内容,并且您从未将其添加到root_layout。
调试
如果你想看看你的布局有什么样的布局层次。打开ddms视图,然后点击那里的heirarchy Viewer选项。它位于相机选项附近。点击它并进入屏幕,你会看到你的布局层次结构,它将显示一个linearLayout包含一个微调器。
这是一个演示它的代码。
package com.example.testproject;

import android.app.Activity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.Spinner;
公共类MainActivity扩展Activity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /** * This is what you have done!!! */ LinearLayout layout=new LinearLayout(this); String[] strings={"1","2","3"}; Spinner spinner=new Spinner(this); spinner.setAdapter(new ArrayAdapter< String> (this, android.R.layout.simple_spinner_dropdown_item,strings)); layout.addView(spinner); /** * Comment this line when you use the below mentioned solution. */ setContentView(layout); /** * This is what you should have done. */RelativeLayout root_layout=(RelativeLayout)findViewById(R.id.root_layout); root_layout.addView(spinner); }

}
希望它能帮到你。
另一答案你可以发布位于项目的activity_main.xml文件夹中的res/layout/文件。
无论如何,你应该将你的微调器添加到你的main_layout,而不是一些没有连接到任何东西的新线性布局。
以下是解决方案应该是什么样子(尽管如此,这只会取决于你的activity_main.xml文件中实际写的内容):
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); startTime = (EditText)findViewById(R.id.EditTextST); startDate = (EditText)findViewById(R.id.editTextSD); // The line below assumes that the layout called main_layout // found in the res/layout/activity_main.xml is a LinearLayout LinearLayout mainLayout = (LinearLayout)findViewById(R.id.main_layout); ArrayList< String> spinnerArray = new ArrayList< String> (); spinnerArray.add("one"); spinnerArray.add("two"); spinnerArray.add("three"); spinnerArray.add("four"); spinnerArray.add("five"); Spinner spinner = new Spinner(this); ArrayAdapter< String> spinnerArrayAdapter = new ArrayAdapter< String> (this,android.R.layout.simple_spinner_dropdown_item, spinnerArray); spinner.setAdapter(spinnerArrayAdapter); mainLayout.addView(spinner); }

在你纠正了这个错误之后,我建议你学习一点java并在三到四周内每天至少做二十分钟的Java练习。一旦你了解了一点Java,你就能够很容易地纠正这些错误。
另一答案错误:您创建了新的线性布局(不包含任何视图)并添加了微调器,然后使用此布局重新定位您的activity_main布局,该布局仅包含微调器。
简单的方法是最初使Spinner不可见,并在单击按钮时使其可见
因此,在XML中声明spinner spinner visibility =“gone”
< Spinner android:id="@+id/my_spin" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="gone" />

在Oncreate中
spinner = (Spinner) findViewById(R.id.my_spin);

现在,在Click of按钮上显示微调器
timer_spin.setVisibility(View.VISIBLE);

注意:
GONE:此视图不可见,并且不需要任何空间用于布局。
INVISIBLE:此视图不可见,但仍然占用了布局空间
可见:此视图可见。
另一答案请看看你的代码
setContentView(R.layout.activity_main);

但后来
setContentView(linearlayout);

仔细处理所有这些事情
请在您的主xml布局中使用单独的线性布局并使用以下内容
final LinearLayout lm = (LinearLayout) findViewById(R.id.linearMain);

【在Android中动态单击按钮添加微调器】而不是LinearLayout linearlayout = new LinearLayout(this);

    推荐阅读