2014-01-20 2 views
0

Я сделал пользовательский вид, который я назвал Game.javaКак я могу указать пользовательский класс вида из Activity?

public class Game extends View { 
    public Game(Context context, AttributeSet attrs) { 
//here goes class 
public void shot(){ 
} 
//method I want to use sometime 
} 

здесь часть моего файла макета для активность game.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/root" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 

    tools:context=".GameActivity" > 

    <com.vladdrummer.textmaster.Game 
     android:id="@+id/game" 
     android:layout_width="wrap_content" 
     android:windowSoftInputMode="adjustResize" 
     android:layout_height="wrap_content" 
     android:text="@string/hello_world" /> 
<View 
     android:id="@+id/spareview" 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:layout_alignParentLeft="true" 
     android:layout_centerVertical="true" /> 

и т.д .. Так, в деятельности я просто

setContentView(R.layout.game); 

и я получил свой собственный вид класс под названием Game.java как части экрана

Но как мне его решить? если да:

Game game; 
game =(Game) findViewById(R.id.game); 
game.shot(); 

сбой.

конечно, я могу сделать:

Game game=new Game(this) 
setContentView(game); 

и иметь доступ к игре, так что он не будет врезаться, но мне нужны другие элементы на экране, а

скажите, пожалуйста, как это сделать право

+0

какая ошибка вы получаете, когда вы ссылаетесь от XML ?? –

+0

«findViewById (R.id.game)» возвращает null? Или это ошибка изнутри game.shot()? – NigelK

+0

попробуйте использовать все конструкторы в вашем GameView – Tsunaze

ответ

1

В вашем xml вы можете разместить RelativeLayout или LinearLayout и разместить его в любом месте. Вы также можете иметь другие представления в xml. Это один из способов

setContentView(R.layout.yourlayout); // infalte layout 
RelativeLayout rl =(RelativeLayout) findViewById(R.id.relativeLayout);// initialize 
Game game=new Game(this); 
rl.addView(game); // ad view to container 

Но у вас есть пользовательский вид в вашем макете. У вас отсутствуют конструкторы в GameView. Ваш метод также должен также работать

чтения Глава 4 Создание пользовательского интерфейса с помощью ретро Meier Professional Android Devleopment

+0

, это просто упрощенный пример. Я не хочу публиковать весь код, код здесь не тот момент. Спасибо за ответ, я попробую его – user2976267

+0

@ user2976267, но код релевантен, и вы также должны опубликовать соответствующий код. – Raghunandan

+0

@ user2976267 Я говорю это bcoz, ваш метод также должен работать. ваше имя пакета правильно для представления cusotm в xml? – Raghunandan

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