【问题标题】:Android Linear layout changes not visible onUnityAndroid 线性布局更改在Unity 上不可见
【发布时间】:2015-04-04 04:40:24
【问题描述】:

我有一个来自示例的 android UI,如下所示

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
     <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:weightSum="1" android:layout_height="wrap_content">
        <TextView android:text="data1:" 
            android:id="@+id/data1Label" 
            android:layout_weight="0.5"
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content">
        </TextView>
        <TextView android:text="data2:" 
            android:id="@+id/data2Label" 
            android:layout_weight="0.5"
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content">
        </TextView>     
    </LinearLayout>
    <ListView android:id="@+id/in"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:stackFromBottom="true"
        android:transcriptMode="alwaysScroll"
        android:layout_weight="1"
    />
</LinearLayout>

然后我需要在顶部标签面板之后添加一个组合框,然后我添加了一个 Spinner 组件,如下所示

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
     <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:weightSum="1" android:layout_height="wrap_content">
        <TextView android:text="data1:" 
            android:id="@+id/data1Label" 
            android:layout_weight="0.5"
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content">
        </TextView>
        <TextView android:text="data2:" 
            android:id="@+id/data2Label" 
            android:layout_weight="0.5"
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content">
        </TextView>     
    </LinearLayout>
    <Spinner
    android:id="@+id/cmd_spinner"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />
    <ListView android:id="@+id/in"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:stackFromBottom="true"
        android:transcriptMode="alwaysScroll"
        android:layout_weight="1"
    />
</LinearLayout>

在我的 Strings.xml 资源文件中,我添加了微调器的数据列表。

<string-array name="cmd_array">
        <item>cmd1</item>
        <item>cmd2</item>
        <item>cmd3</item>
    </string-array>

然后在我的活动类的创建方法结束时,我在下面添加了将数据设置到微调器的方法

Spinner spinner = (Spinner) findViewById(R.id.cmd_spinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
             R.array.cmd_array, android.R.layout.simple_spinner_item);
 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  spinner.setAdapter(adapter);

但是当我运行我的应用程序时,它并没有显示微调器。 对这个问题有任何想法吗?

更新

我正在将我的应用程序编译为一个 android libaray 项目,主要活动是从 Unity 游戏引擎开始的。

【问题讨论】:

    标签: java android unity3d


    【解决方案1】:

    在 onCreate() 方法中以这种方式设置您的微调器数据:

        Spinner spinner = (Spinner) findViewById(R.id.cmd_spinner);
        String[] array = getResources().getStringArray(R.array.cmd_array);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_dropdown_item, array);
        spinner.setAdapter(adapter);
    

    【讨论】:

      【解决方案2】:

      你应该试试这个-----

       Spinner spinner = (Spinner) findViewById(R.id.cmd_spinner);
       String[] stringArray = getResources().getStringArray(R.array.cmd_array);
       ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,
                  android.R.layout.simple_spinner_dropdown_item, stringArray);
       spinner.setAdapter(arrayAdapter);
      

      你应该像下面这样修改你的xml,因为这是更好的方法......

      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="vertical"
      android:layout_width="match_parent"
      android:layout_height="match_parent">
      
      <LinearLayout
          android:id="@+id/linearLayout1"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:orientation="horizontal">
      
          <TextView
              android:text="data1:"
              android:id="@+id/data1Label"
              android:layout_weight="0.5"
              android:layout_width="0dp"
              android:layout_height="wrap_content"/>
      
          <TextView
              android:text="data2:"
              android:id="@+id/data2Label"
              android:layout_weight="0.5"
              android:layout_width="0dp"
              android:layout_height="wrap_content"/>
      </LinearLayout>
      
      <Spinner
          android:id="@+id/cmd_spinner"
          android:layout_width="match_parent"
          android:layout_height="wrap_content" />
      
      <ListView
          android:id="@+id/in"
          android:layout_width="match_parent"
          android:layout_height="0dp"
          android:stackFromBottom="true"
          android:transcriptMode="alwaysScroll"
          android:layout_weight="1" />
      

      【讨论】:

        【解决方案3】:

        你可以看看这个answer。您也可以使用自定义适配器,但以下解决方案适用于简单情况。

        这是一个转发:

        因此,如果您来这里是因为您想在 Spinner 中同时拥有标签和值 - 我就是这样做的:

        只需按照通常的方式创建您的 Spinner 在你的 array.xml 文件中定义 2 个大小相等的数组——一个数组用于标签,一个数组用于值 使用 android:entries="@array/labels"

        设置您的 Spinner

        当你需要一个值时,做这样的事情(不,你不必链接它):

          String selectedVal = getResources().getStringArray(R.array.values)[spinner.getSelectedItemPosition()];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-26
          • 1970-01-01
          • 2013-08-21
          • 1970-01-01
          相关资源
          最近更新 更多