2011-05-16 69 views
0

我有下面的类(包括到另一个类)延伸按钮机器人,XML布局

class RecordButton extends Button { 
    boolean mStartRecording = true; 

    OnClickListener clicker = new OnClickListener() { 
     public void onClick(View v) { 
      onRecord(mStartRecording); 
      if (mStartRecording) { 
       setText("Stop recording"); 
      } else { 
       setText("Start recording"); 
      } 
      mStartRecording = !mStartRecording; 
     } 
    }; 

    public RecordButton(Context ctx) { 
     super(ctx); 
     setText("Start recording"); 
     setOnClickListener(clicker); 
    } 
} 

按钮的显示用下面的代码是由:

public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 

    LinearLayout ll = new LinearLayout(this); 
    mRecordButton = new RecordButton(this); 
    ll.addView(mRecordButton, 
     new LinearLayout.LayoutParams(
      ViewGroup.LayoutParams.WRAP_CONTENT, 
      ViewGroup.LayoutParams.WRAP_CONTENT, 
      0)); 
    setContentView(ll); 
} 

如何可以定义将按钮布局放入.xml文件中而不是在java代码中执行?

我已经试过了:

<AudioRecordTest.test.RecordButton 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Button" 
    android:id="@+id/record" /> 

但它不工作...

非常感谢,

约阿希姆

+0

尝试使用完整的软件包名称(例如,com.joachim.AudioRecordTest.test.RecordButton,或任何您的软件包) – kcoppock 2011-05-16 22:44:20

回答

2

我明白 “(列入其他类)”因为你有一个内部类RecordButton

假设你的包是AudioRecordTest.test(这将是一个非常糟糕的选择名称)和您RecordButton类是一个内部类AudioRecord.class的,你需要使用:

<view class="AudioRecordTest.test.AudioRecord$RecordButton" 

使用$标志分开内部类。您需要在引号内写入限定名称。此外,请确保您创建了公共静态类,否则它将不可见。

顺便说一句:任何特定的原因,你创建它作为一个内部类而不是分开?

+0

嗨Aleadam, 感谢您的帮助!确实,我应该使用 仍然有一些工作不正常。与此xml相关的Java代码应该如何?或者你有没有任何代码做类似的例子? 我使用内部类的原因纯粹是为了测试,如果将这个类放在单独的文件中更好或更容易,我会这样做。 非常感谢, 乔 – joachim 2011-05-19 19:42:56

+0

,你将需要使用像'mRecordButton =(RecordButton)findViewById(R.id.record);',但要确保你的RecorButton条目的布局里面,你用'充气的setContentView( );'。 – Aleadam 2011-05-20 05:41:35