2025-05-17

git clone https://code.google.com/p/androiddemoformini6410/ 
git clone https://code.google.com/p/androiddemoformini6410/

 

 

PWMActivity.java

[java] package com.mini6410.PWM; 
 
 
import android.app.Activity; 
import android.os.Bundle; 
import android.text.Editable; 
import android.text.TextWatcher; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.CompoundButton; 
import android.widget.EditText; 
import android.widget.ToggleButton; 
 
import com.friendlyarm.AndroidSDK.HardwareControler; 
import com.mini6410.R; 
 
/**
 * 
 * ClassName:PWMActivity
 * Reason:   PWM Demo
 *
 * @author   snowdream
 * @version  
 * @since    Ver 1.1
 * @Date     2011   2012-03-11      17:21
 *
 * @see      
 */ 
public class PWMActivity extends Activity implements Button.OnClickListener,ToggleButton.OnCheckedChangeListener{ 
    public static final String TAG = "PWMActivity"; 
 
    /*PWM頻率*/ 
    public static final int PWM_FREQUENCY_1 = 1; 
    public static final int PWM_FREQUENCY_100 = 100; 
    public static final int PWM_FREQUENCY_200 = 200; 
    public static final int PWM_FREQUENCY_500 = 500; 
    public static final int PWM_FREQUENCY_1000 = 1000; 
    public static final int PWM_FREQUENCY_2000 = 2000; 
    public static final int PWM_FREQUENCY_5000 = 5000; 
    public static final int PWM_FREQUENCY_10000 = 10000; 
 
    /*PWM播放時長*/ 
    public static final int PWM_PLAY_PERIOD_FOR_EVER = -1; 
    public static final int PWM_PLAY_PERIOD_100 = 100; 
    public static final int PWM_PLAY_PERIOD_200 = 200; 
    public static final int PWM_PLAY_PERIOD_300 = 300; 
    public static final int PWM_PLAY_PERIOD_500 = 500; 
    public static final int PWM_PLAY_PERIOD_1000 = 1000; 
 
    /*PWM播放間隔*/ 
    public static final int PWM_WAIT_PERIOD_100 = 100; 
    public static final int PWM_WAIT_PERIOD_200 = 200; 
    public static final int PWM_WAIT_PERIOD_300 = 300; 
    public static final int PWM_WAIT_PERIOD_500 = 500; 
    public static final int PWM_WAIT_PERIOD_1000 = 1000; 
 
 
    /*播放頻率*/ 
    public int mfrequency = PWM_FREQUENCY_1000; 
     
    /*頻率改變步長Step*/ 
    public int mfrequencystep = 100; 
     
    /*播放時長*/ 
    public int mplayperiod = PWM_PLAY_PERIOD_1000; 
     
    /*播放間隔*/ 
    public int mwaitperiod = PWM_WAIT_PERIOD_1000; 
     
    /*播放次數*/ 
    public int mplaynum = 20; 
 
    private boolean mStop = false; 
 
    private Button mButtonSub = null; 
    private Button mButtonAdd = null; 
 
    private ToggleButton mToggleButtonStartForEver= null; 
    private ToggleButton mToggleButtonStartForTimes = null; 
 
    private EditText mEditTextFrequency = null; 
    private EditText mEditTextPlayPeriod = null; 
    private EditText mTextViewWaitPeriod = null; 
    private EditText mEditTextPlayNum = null; 
 
 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.pwmdemo); 
 
        initUI(); 
        initData(); 
 
    } 
 
    @Override 
    protected void onDestroy() { 
        mStop = true; 
        super.onDestroy(); 
    } 
 
    /**
     * 
     * initUI: 初始化UI
     *
     * @param   
     * @return     
     * @throws 
     */ 
    public void initUI(){ 
        mButtonSub = (Button)findViewById(R.id.ButtonSUB); 
        mButtonAdd = (Button)findViewById(R.id.ButtonADD); 
 
        /*按鈕監聽器,具體實現參考下面的函數:onClick*/ 
        mButtonSub.setOnClickListener(this); 
        mButtonAdd.setOnClickListener(this); 
 
        mToggleButtonStartForEver= (ToggleButton)findViewById(R.id.ToggleButtonStartForEver); 
        mToggleButtonStartForTimes = (ToggleButton)findViewById(R.id.ToggleButtonStartForTimes); 
 
        /*開關按鈕監聽器,具體實現參考下面的函數:onCheckedChanged*/ 
        mToggleButtonStartForEver.setOnCheckedChangeListener(this); 
        mToggleButtonStartForTimes.setOnCheckedChangeListener(this); 
 
        mEditTextFrequency = (EditText)findViewById(R.id.EditTextFrequency); 
        mEditTextPlayPeriod = (EditText)findViewById(R.id.EditTextPlayPeriod); 
        mTextViewWaitPeriod = (EditText)findViewById(R.id.EditTextWaitPeriod); 
        mEditTextPlayNum = (EditText)findViewById(R.id.EditTextPlayNum); 
 
        /*EditText監聽器,具體實現參考下面的函數:onTextChanged
         * 主要用於獲取更改後最新的數值,下同。
         * */ 
        mEditTextFrequency.addTextChangedListener(new TextWatcher() { 
 
            public void onTextChanged(CharSequence s, int start, int before, int count) { 
                // TODO Auto-generated method stub  
                try { 
                    mfrequency = Integer.parseInt(mEditTextFrequency.getText().toString()); 
                } catch (NumberFormatException e) { 
                    // TODO Auto-generated catch block  
                    e.printStackTrace(); 
                } 
            } 
 
            public void beforeTextChanged(CharSequence s, int start, int count, 
                    int after) { 
                // TODO Auto-generated method stub  
 
            } 
 
            public void afterTextChanged(Editable s) { 
                // TODO Auto-generated method stub  
 
            } 
        }); 
 
        mEditTextPlayPeriod.addTextChangedListener(new TextWatcher() { 
 
            public void onTextChanged(CharSequence s, int start, int before, int count) { 
                // TODO Auto-generated method stub  
                try { 
                    mplayperiod = Integer.parseInt(mEditTextPlayPeriod.getText().toString()); 
                } catch (NumberFormatException e) { 
                    // TODO Auto-generated catch block  
                    e.printStackTrace(); 
                } 
            } 
 
            public void beforeTextChanged(CharSequence s, int start, int count, 
                    int after) { 
                // TODO Auto-generated method stub  
 
            } 
 
            public void afterTextChanged(Editable s) { 
                // TODO Auto-generated method stub  
 
            } 
        }); 
 
        mTextViewWaitPeriod.addTextChangedListener(new TextWatcher() { 
 
            public void onTextChanged(CharSequence s, int start, int before, int count) { 
                // TODO Auto-generated method stub  
                try { 
                    mwaitperiod = Integer.parseInt(mTextViewWaitPeriod.getText().toString()); 
                } catch (NumberFormatException e) { 
                    // TODO Auto-generated catch block  
                    e.printStackTrace(); 
                } 
            } 
 
            public void beforeTextChanged(CharSequence s, int start, int count, 
                    int after) { 
                // TODO Auto-generated method stub  
 
            } 
 
            public void afterTextChanged(Editable s) { 
                // TODO Auto-generated method stub  
 
            } 
        }); 
 
        mEditTextPlayNum.addTextChangedListener(new TextWatcher() { 
 
            public void onTextChanged(CharSequence s, int start, int before, int count) { 
                // TODO Auto-generated method stub  
                try { 
                    mplaynum = Integer.parseInt(mEditTextPlayNum.getText().toString()); 
                } catch (NumberFormatException e) { 
                    // TODO Auto-generated catch block  
                    e.printStackTrace(); 
                } 
            } 
 
            public void beforeTextChanged(CharSequence s, int start, int count, 
                    int after) { 
                // TODO Auto-generated method stub  
 
            } 
 
            public void afterTextChanged(Editable s) { 
                // TODO Auto-generated method stub  
 
            } 
        }); 
 
 
    } 
 
    /**
     * 
     * initData: 初始化各個控件的數值
     *
     * @param   
     * @return     
     * @throws 
     */ 
    public void initData(){ 
        mEditTextFrequency.setText(String.valueOf(mfrequency)); 
        mEditTextPlayPeriod.setText(String.valueOf(mplayperiod)); 
        mTextViewWaitPeriod.setText(String.valueOf(mwaitperiod)); 
        mEditTextPlayNum.setText(String.valueOf(mplaynum)); 
    } 
 
 
    /**
     * 
     * onCheckedChanged: 開關按鈕監聽器。當有開關按鈕的狀態改變時,響應點擊。
     *
     * @param   buttonView 改變狀態的開關按鈕對象;
     * @param   isChecked  該開關按鈕是否被選中;
     * @return     
     * @throws 
     */ 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
        ToggleButton mToggleButton = (ToggleButton)buttonView; 
 
        switch (mToggleButton.getId()) { 
        case R.id.ToggleButtonStartForEver: 
            if(isChecked){ 
                PWMPlay(mfrequency); 
            }else{ 
                mStop = true; 
                PWMStop(); 
            } 
            break; 
        case R.id.ToggleButtonStartForTimes: 
            if(isChecked){ 
                mStop = false; 
                PWMThread mPWMThread = new PWMThread(); 
                mPWMThread.start(); 
            }else{ 
                mStop = true; 
            } 
            break;       
        default: 
            break; 
        } 
    } 
 
    /**
     * 
     * onClick: 按鈕監聽器。當有按鈕被點擊時,響應點擊。
     *
     * @param   v 被點擊的按鈕對象;
     * @return     
     * @throws 
     */ 
    public void onClick(View v) { 
        Button mButton = (Button)v; 
 
        switch (mButton.getId()) { 
        case R.id.ButtonSUB: 
            if(mfrequency <= 1) 
                mfrequency = PWM_FREQUENCY_1; 
            else if(mfrequency == PWM_FREQUENCY_100) 
                mfrequency = PWM_FREQUENCY_1;    
            else 
                mfrequency -= mfrequencystep; 
 
            mEditTextFrequency.setText(String.valueOf(mfrequency)); 
            break; 
        case R.id.ButtonADD: 
            if(mfrequency <= 1) 
                mfrequency = PWM_FREQUENCY_100; 
            else 
                mfrequency += mfrequencystep; 
 
            mEditTextFrequency.setText(String.valueOf(mfrequency)); 
            break; 
        default: 
            break; 
        } 
    } 
 
    /**
     * 
     * PWMPlay: 啟動蜂鳴器 ,並播放。
     *
     * @param   frequency 播放頻率
     * @return  true 表示播放成功;否則,表示播放失敗。  
     * @throws 
     */ 
    public boolean PWMPlay(int frequency) 
    { 
        boolean ret  = false; 
        int result = -1; 
 
        result = HardwareControler.PWMPlay(frequency); 
 
        if(result == 0) 
            ret = true; 
        else 
            ret = false; 
 
        return ret; 
    } 
 
    /**
     * 
     * PWMStop: 停止並關閉蜂鳴器。
     *
     * @param   
     * @return  true 表示停止成功;否則,表示停止失敗。  
     * @throws 
     */ 
    public boolean PWMStop(){ 
        boolean ret  = false; 
        int result = -1; 
 
        result = HardwareControler.PWMStop(); 
 
        if(result == 0) 
            ret = true; 
        else 
            ret = false; 
 
        return ret;      
    } 
 
    /**
     * 
     * PWMThread: PWM播放線程
     *
     * @param   
     * @return   
     * @throws 
     */ 
    public class PWMThread extends Thread{ 
 
        @Override 
        public void run() { 
            Log.i(TAG, "PWMThread Start"); 
 
            for(int i = 0 ; i < mplaynum; i++ ) 
            { 
                Log.i(TAG, String.valueOf(i)); 
 
                if(mStop) 
                { 
                    PWMStop(); 
                    break; 
                } 
 
                /*啟動蜂鳴器,並使用頻率 mfrequency 進行播放*/ 
                PWMPlay(mfrequency); 
 
                /*等待播放時長 mplayperiod 結束*/ 
                try { 
                    sleep(mplayperiod); 
                } catch (InterruptedException e) { 
                    e.printStackTrace(); 
                } 
                 
                /*停止蜂鳴器*/ 
                PWMStop(); 
 
                if(mStop) 
                    break; 
 
                /*等待播放間隔 mwaitperiod 結束*/ 
                try { 
                    sleep(mwaitperiod); 
                } catch (InterruptedException e) { 
                    e.printStackTrace(); 
                }                
 
            } 
            Log.i(TAG, "PWMThread Stop"); 
        } 
    } 

package com.mini6410.PWM;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.ToggleButton;

import com.friendlyarm.AndroidSDK.HardwareControler;
import com.mini6410.R;

/**
 *
 * ClassName:PWMActivity
 * Reason:  PWM Demo
 *
 * @author   snowdream
 * @version 
 * @since    Ver 1.1
 * @Date  2011 2012-03-11  17:21
 *
 * @see  
 */
public class PWMActivity extends Activity implements Button.OnClickListener,ToggleButton.OnCheckedChangeListener{
 public static final String TAG = "PWMActivity";

 /*PWM頻率*/
 public static final int PWM_FREQUENCY_1 = 1;
 public static final int PWM_FREQUENCY_100 = 100;
 public static final int PWM_FREQUENCY_200 = 200;
 public static final int PWM_FREQUENCY_500 = 500;
 public static final int PWM_FREQUENCY_1000 = 1000;
 public static final int PWM_FREQUENCY_2000 = 2000;
 public static final int PWM_FREQUENCY_5000 = 5000;
 public static final int PWM_FREQUENCY_10000 = 10000;

 /*PWM播放時長*/
 public static final int PWM_PLAY_PERIOD_FOR_EVER = -1;
 public static final int PWM_PLAY_PERIOD_100 = 100;
 public static final int PWM_PLAY_PERIOD_200 = 200;
 public static final int PWM_PLAY_PERIOD_300 = 300;
 public static final int PWM_PLAY_PERIOD_500 = 500;
 public static final int PWM_PLAY_PERIOD_1000 = 1000;

 /*PWM播放間隔*/
 public static final int PWM_WAIT_PERIOD_100 = 100;
 public static final int PWM_WAIT_PERIOD_200 = 200;
 public static final int PWM_WAIT_PERIOD_300 = 300;
 public static final int PWM_WAIT_PERIOD_500 = 500;
 public static final int PWM_WAIT_PERIOD_1000 = 1000;

 /*播放頻率*/
 public int mfrequency = PWM_FREQUENCY_1000;
 
 /*頻率改變步長Step*/
 public int mfrequencystep = 100;
 
 /*播放時長*/
 public int mplayperiod = PWM_PLAY_PERIOD_1000;
 
 /*播放間隔*/
 public int mwaitperiod = PWM_WAIT_PERIOD_1000;
 
 /*播放次數*/
 public int mplaynum = 20;

 private boolean mStop = false;

 private Button mButtonSub = null;
 private Button mButtonAdd = null;

 private ToggleButton mToggleButtonStartForEver= null;
 private ToggleButton mToggleButtonStartForTimes = null;

 private EditText mEditTextFrequency = null;
 private EditText mEditTextPlayPeriod = null;
 private EditText mTextViewWaitPeriod = null;
 private EditText mEditTextPlayNum = null;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.pwmdemo);

  initUI();
  initData();

 }

 @Override
 protected void onDestroy() {
  mStop = true;
  super.onDestroy();
 }

 /**
  *
  * initUI: 初始化UI
  *
  * @param  
  * @return    
  * @throws
  */
 public void initUI(){
  mButtonSub = (Button)findViewById(R.id.ButtonSUB);
  mButtonAdd = (Button)findViewById(R.id.ButtonADD);

  /*按鈕監聽器,具體實現參考下面的函數:onClick*/
  mButtonSub.setOnClickListener(this);
  mButtonAdd.setOnClickListener(this);

  mToggleButtonStartForEver= (ToggleButton)findViewById(R.id.ToggleButtonStartForEver);
  mToggleButtonStartForTimes = (ToggleButton)findViewById(R.id.ToggleButtonStartForTimes);

  /*開關按鈕監聽器,具體實現參考下面的函數:onCheckedChanged*/
  mToggleButtonStartForEver.setOnCheckedChangeListener(this);
  mToggleButtonStartForTimes.setOnCheckedChangeListener(this);

  mEditTextFrequency = (EditText)findViewById(R.id.EditTextFrequency);
  mEditTextPlayPeriod = (EditText)findViewById(R.id.EditTextPlayPeriod);
  mTextViewWaitPeriod = (EditText)findViewById(R.id.EditTextWaitPeriod);
  mEditTextPlayNum = (EditText)findViewById(R.id.EditTextPlayNum);

  /*EditText監聽器,具體實現參考下面的函數:onTextChanged
   * 主要用於獲取更改後最新的數值,下同。
   * */
  mEditTextFrequency.addTextChangedListener(new TextWatcher() {

   public void onTextChanged(CharSequence s, int start, int before, int count) {
    // TODO Auto-generated method stub
    try {
     mfrequency = Integer.parseInt(mEditTextFrequency.getText().toString());
    } catch (NumberFormatException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }

   public void beforeTextChanged(CharSequence s, int start, int count,
     int after) {
    // TODO Auto-generated method stub

   }

   public void afterTextChanged(Editable s) {
    // TODO Auto-generated method stub

   }
  });

  mEditTextPlayPeriod.addTextChangedListener(new TextWatcher() {

   public void onTextChanged(CharSequence s, int start, int before, int count) {
    // TODO Auto-generated method stub
    try {
     mplayperiod = Integer.parseInt(mEditTextPlayPeriod.getText().toString());
    } catch (NumberFormatException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }

   public void beforeTextChanged(CharSequence s, int start, int count,
     int after) {
    // TODO Auto-generated method stub

   }

   public void afterTextChanged(Editable s) {
    // TODO Auto-generated method stub

   }
  });

  mTextViewWaitPeriod.addTextChangedListener(new TextWatcher() {

   public void onTextChanged(CharSequence s, int start, int before, int count) {
    // TODO Auto-generated method stub
    try {
     mwaitperiod = Integer.parseInt(mTextViewWaitPeriod.getText().toString());
    } catch (NumberFormatException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }

   public void beforeTextChanged(CharSequence s, int start, int count,
     int after) {
    // TODO Auto-generated method stub

   }

   public void afterTextChanged(Editable s) {
    // TODO Auto-generated method stub

   }
  });

  mEditTextPlayNum.addTextChangedListener(new TextWatcher() {

   public void onTextChanged(CharSequence s, int start, int before, int count) {
    // TODO Auto-generated method stub
    try {
     mplaynum = Integer.parseInt(mEditTextPlayNum.getText().toString());
    } catch (NumberFormatException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }

   public void beforeTextChanged(CharSequence s, int start, int count,
     int after) {
    // TODO Auto-generated method stub

   }

   public void afterTextChanged(Editable s) {
    // TODO Auto-generated method stub

   }
  });

 }

 /**
  *
  * initData: 初始化各個控件的數值
  *
  * @param  
  * @return    
  * @throws
  */
 public void initData(){
  mEditTextFrequency.setText(String.valueOf(mfrequency));
  mEditTextPlayPeriod.setText(String.valueOf(mplayperiod));
  mTextViewWaitPeriod.setText(String.valueOf(mwaitperiod));
  mEditTextPlayNum.setText(String.valueOf(mplaynum));
 }

 /**
  *
  * onCheckedChanged: 開關按鈕監聽器。當有開關按鈕的狀態改變時,響應點擊。
  *
  * @param   buttonView 改變狀態的開關按鈕對象;
  * @param   isChecked  該開關按鈕是否被選中;
  * @return    
  * @throws
  */
 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
  ToggleButton mToggleButton = (ToggleButton)buttonView;

  switch (mToggleButton.getId()) {
  case R.id.ToggleButtonStartForEver:
   if(isChecked){
    PWMPlay(mfrequency);
   }else{
    mStop = true;
    PWMStop();
   }
   break;
  case R.id.ToggleButtonStartForTimes:
   if(isChecked){
    mStop = false;
    PWMThread mPWMThread = new PWMThread();
    mPWMThread.start();
   }else{
    mStop = true;
   }
   break;  
  default:
   break;
  }
 }

 /**
  *
  * onClick: 按鈕監聽器。當有按鈕被點擊時,響應點擊。
  *
  * @param   v 被點擊的按鈕對象;
  * @return    
  * @throws
  */
 public void onClick(View v) {
  Button mButton = (Button)v;

  switch (mButton.getId()) {
  case R.id.ButtonSUB:
   if(mfrequency <= 1)
    mfrequency = PWM_FREQUENCY_1;
   else if(mfrequency == PWM_FREQUENCY_100)
    mfrequency = PWM_FREQUENCY_1; 
   else
    mfrequency -= mfrequencystep;

   mEditTextFrequency.setText(String.valueOf(mfrequency));
   break;
  case R.id.ButtonADD:
   if(mfrequency <= 1)
    mfrequency = PWM_FREQUENCY_100;
   else
    mfrequency += mfrequencystep;

   mEditTextFrequency.setText(String.valueOf(mfrequency));
   break;
  default:
   break;
  }
 }

 /**
  *
  * PWMPlay: 啟動蜂鳴器 ,並播放。
  *
  * @param   frequency 播放頻率
  * @return  true 表示播放成功;否則,表示播放失敗。 
  * @throws
  */
 public boolean PWMPlay(int frequency)
 {
  boolean ret  = false;
  int result = -1;

  result = HardwareControler.PWMPlay(frequency);

  if(result == 0)
   ret = true;
  else
   ret = false;

  return ret;
 }

 /**
  *
  * PWMStop: 停止並關閉蜂鳴器。
  *
  * @param  
  * @return  true 表示停止成功;否則,表示停止失敗。 
  * @throws
  */
 public boolean PWMStop(){
  boolean ret  = false;
  int result = -1;

  result = HardwareControler.PWMStop();

  if(result == 0)
   ret = true;
  else
   ret = false;

  return ret;  
 }

 /**
  *
  * PWMThread: PWM播放線程
  *
  * @param  
  * @return  
  * @throws
  */
 public class PWMThread extends Thread{

  @Override
  public void run() {
   Log.i(TAG, "PWMThread Start");

   for(int i = 0 ; i < mplaynum; i++ )
   {
    Log.i(TAG, String.valueOf(i));

    if(mStop)
    {
     PWMStop();
     break;
    }

    /*啟動蜂鳴器,並使用頻率 mfrequency 進行播放*/
    PWMPlay(mfrequency);

    /*等待播放時長 mplayperiod 結束*/
    try {
     sleep(mplayperiod);
    } catch (InterruptedException e) {
     e.printStackTrace();
    }
    
    /*停止蜂鳴器*/
    PWMStop();

    if(mStop)
     break;

    /*等待播放間隔 mwaitperiod 結束*/
    try {
     sleep(mwaitperiod);
    } catch (InterruptedException e) {
     e.printStackTrace();
    }    

   }
   Log.i(TAG, "PWMThread Stop");
  }
 }
}
 

 

 

pwmdemo.xml

[html] <?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" > 
 
    <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal" > 
 
        <TextView 
            android:id="@+id/TextViewFrequency" 
            android:layout_width="80dip" 
            android:layout_height="40dip" 
            android:gravity="center" 
            android:text="@string/frequency" /> 
 
        <Button 
            android:id="@+id/ButtonSUB" 
            android:layout_width="40dip" 
            android:layout_height="40dip" 
            android:gravity="center" 
            android:text="@string/sub" /> 
 
        <EditText 
            android:id="@+id/EditTextFrequency" 
            android:layout_width="120dip" 
            android:layout_height="40dip" 
            android:gravity="center" 
            android:inputType="number" /> 
 
        <Button 
            android:id="@+id/ButtonADD" 
            android:layout_width="40dip" 
            android:layout_height="40dip" 
            android:gravity="center" 
            android:text="@string/add" /> 
    </LinearLayout> 
 
    <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal" > 
 
        <TextView 
            android:id="@+id/TextViewPlayPeriod" 
            android:layout_width="80dip" 
            android:layout_height="40dip" 
            android:gravity="center" 
            android:text="@string/playperiod" /> 
 
        <EditText 
            android:id="@+id/EditTextPlayPeriod" 
            android:layout_width="200dip" 
            android:layout_height="40dip" 
            android:gravity="center" 
            android:inputType="number" /> 
    </LinearLayout> 
 
    <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal" > 
 
        <TextView 
            android:id="@+id/TextViewWaitPeriod" 
            android:layout_width="80dip" 
            android:layout_height="40dip" 
            android:gravity="center" 
            android:text="@string/waitperiod" /> 
 
        <EditText 
            android:id="@+id/EditTextWaitPeriod" 
            android:layout_width="200dip" 
            android:layout_height="40dip" 
            android:layout_gravity="center" 
            android:gravity="center" 
            android:inputType="number" /> 
    </LinearLayout> 
 
    <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal" > 
 
        <TextView 
            android:id="@+id/TextViewPlayNum" 
            android:layout_width="80dip" 
            android:layout_height="40dip" 
            android:gravity="center" 
            android:text="@string/playnum" /> 
 
        <EditText 
            android:id="@+id/EditTextPlayNum" 
            android:layout_width="200dip" 
            android:layout_height="40dip" 
            android:layout_gravity="center" 
            android:gravity="center" 
            android:inputType="number" /> 
    </LinearLayout> 
 
    <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal" > 
 
        <TextView 
            android:id="@+id/TextViewStartForEver" 
            android:layout_width="80dip" 
            android:layout_height="40dip" 
            android:gravity="center" 
            android:text="@string/playforever" /> 
 
        <ToggleButton 
            android:id="@+id/ToggleButtonStartForEver" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            android:gravity="center" /> 
 
        <LinearLayout 
            android:layout_width="10dip" 
            android:layout_height="wrap_content" 
            android:orientation="horizontal" > 
        </LinearLayout> 
 
        <TextView 
            android:id="@+id/TextViewStartForTimes" 
            android:layout_width="80dip" 
            android:layout_height="40dip" 
            android:gravity="center" 
            android:text="@string/playfortimes" /> 
 
        <ToggleButton 
            android:id="@+id/ToggleButtonStartForTimes" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            android:gravity="center" /> 
    </LinearLayout> 
 
</LinearLayout> 
<?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" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/TextViewFrequency"
            android:layout_width="80dip"
            android:layout_height="40dip"
            android:gravity="center"
            android:text="@string/frequency" />

        <Button
            android:id="@+id/ButtonSUB"
            android:layout_width="40dip"
            android:layout_height="40dip"
            android:gravity="center"
            android:text="@string/sub" />

        <EditText
            android:id="@+id/EditTextFrequency"
            android:layout_width="120dip"
            android:layout_height="40dip"
            android:gravity="center"
            android:inputType="number" />

        <Button
            android:id="@+id/ButtonADD"
            android:layout_width="40dip"
            android:layout_height="40dip"
            android:gravity="center"
            android:text="@string/add" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/TextViewPlayPeriod"
            android:layout_width="80dip"
            android:layout_height="40dip"
            android:gravity="center"
            android:text="@string/playperiod" />

        <EditText
            android:id="@+id/EditTextPlayPeriod"
            android:layout_width="200dip"
            android:layout_height="40dip"
            android:gravity="center"
            android:inputType="number" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/TextViewWaitPeriod"
            android:layout_width="80dip"
            android:layout_height="40dip"
            android:gravity="center"
            android:text="@string/waitperiod" />

        <EditText
            android:id="@+id/EditTextWaitPeriod"
            android:layout_width="200dip"
            android:layout_height="40dip"
            android:layout_gravity="center"
            android:gravity="center"
            android:inputType="number" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/TextViewPlayNum"
            android:layout_width="80dip"
            android:layout_height="40dip"
            android:gravity="center"
            android:text="@string/playnum" />

        <EditText
            android:id="@+id/EditTextPlayNum"
            android:layout_width="200dip"
            android:layout_height="40dip"
            android:layout_gravity="center"
            android:gravity="center"
            android:inputType="number" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/TextViewStartForEver"
            android:layout_width="80dip"
            android:layout_height="40dip"
            android:gravity="center"
            android:text="@string/playforever" />

        <ToggleButton
            android:id="@+id/ToggleButtonStartForEver"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center" />

        <LinearLayout
            android:layout_width="10dip"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >
        </LinearLayout>

        <TextView
            android:id="@+id/TextViewStartForTimes"
            android:layout_width="80dip"
            android:layout_height="40dip"
            android:gravity="center"
            android:text="@string/playfortimes" />

        <ToggleButton
            android:id="@+id/ToggleButtonStartForTimes"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center" />
    </LinearLayout>

</LinearLayout>
預覽效果: 

 

摘自  snowdream
 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *