2013-03-24 1 views
0

Я пишу андроид игры, я создал макет для главного меню, которое имеет этот XML:Android схема компоновки глюк

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/tvStats" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:text="Large Text" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="fill_horizontal" 
     android:gravity="fill_horizontal" > 

     <Button 
      android:id="@+id/btnStartSurvive" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="fill_horizontal" 
      android:gravity="center_vertical|center_horizontal" 
      android:text="Start Survival Mode" /> 

     <Button 
      android:id="@+id/btnStartChall" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="fill_horizontal" 
      android:text="Start Callenge Mode" /> 

    </LinearLayout> 

</LinearLayout> 

Макет отображается на экране, используя эту деятельность:

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View.OnClickListener; 
import android.view.View; 
import android.view.Window; 
import android.view.WindowManager; 
import android.widget.*; 

public class MainActivity extends Activity { 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     //Get rid of the stuff around the edges 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
           WindowManager.LayoutParams.FLAG_FULLSCREEN); 

     //show layout 
     setContentView(R.layout.main_menu); 
     Button btnStart = (Button)findViewById(R.id.btnStartSurvive); 
     btnStart.setOnClickListener(oclStart); 
    } 

    private OnClickListener oclStart = new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Intent intent = new Intent(MainActivity.this, GameActivity.class); 
      intent.putExtra("gametype", 'S'); 
      startActivity(intent); 
     } 
    }; 

} 

Когда я запускаю это на моем телефоне (Android 4.2.2) я получаю то, что выглядит следующим образом:

image 1

Нажатие кнопки неиспользованную делает его выглядеть следующим образом:

image 1

Когда я бегу это на моей старой таблетки (Android 2.2) Я получаю то, что я ожидал:

image 3

Это Android Bug? Как мне обойти это?

Или это моя вина? Как это исправить?

+0

Что произойдет, если вы удалите 'getWindow(). SetFlags (...)'? – Ahmad

+0

Точно так же происходит без полноэкранных флагов, кроме того, что у него есть строка заголовка. Когда я это делаю, похоже, что панель заголовков только что была помещена сверху, а не все остальное, что происходит, это тоже странно. – DanJAB

+0

После нескольких вариантов эмулятора я не мог заставить эмулятор работать так же. Это, по-видимому, проблема Nexus 4. – DanJAB

ответ

0

Мне удалось дублировать те же результаты на Galaxy s4, работающем на 4.2.2. Кнопки, похоже, не так хорошо работают по какой-то причине.

Вы пытались изменить тему? Иногда тема испортит макет.

+0

Я не пробовал менять тему. Другие приложения, которые я написал, используют такие кнопки, как это прекрасно работает. Я не знаю, в чем проблема. Я решил заменить это меню одним нарисованным с помощью GLES, так как остальная часть игры использует его. – DanJAB

Смежные вопросы