Android:一个接一个地点击一到六个按钮,将不同的结果串在一起 [英] Android: Tapping one to six buttons continuously [one after another] to string together different results

查看:109
本文介绍了Android:一个接一个地点击一到六个按钮,将不同的结果串在一起的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经决定在Android应用程序上使用与之前所见过的应用程序非常相似的技术。我想将多个按钮按压在一起,以等同于不同的文本结果。

I have decided to work on an Android app that uses very similar technology to that of an app I have seen before. I wanted to string together multiple button presses to equate to different a different text result.

六点 - 盲文应用(实际应用程序使用)

我制作的本机盲文应用程序有6个不同的按钮,我希望每个独特的组合带给我不同的字母。例如:我想点击按钮1来简单地给我写信A。然后按下按钮1和按钮2不断地给我带来字母C。我想要这六个按钮的每个不同的按钮组合给我一个单独的信。

This native braille app I am making has 6 different buttons that I would like to have every unique combination bring me different letters. For example: I would like hitting button 1 to simple bring me the letter "A". Then hitting button 1 and button 2 continuously brings me the letter "C". I want every different button combination of these 6 buttons to bring me a seperate letter.

有能力熟练掌握Java的人可以解释这个做法吗?如何在多个按钮按下字符串来带给我不同的结果?感谢您的帮助。

Can someone who is proficient at Java please explain how this is done? How can I string in multiple button presses to bring me to a different result? Thanks for the help.

盲文字母

我的java代码:

        public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.keyboard);

          Window window = this.getWindow();
          window.addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD);
          window.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
          window.addFlags(LayoutParams.FLAG_TURN_SCREEN_ON);

          // Init GUI
          txtMessage = (EditText) findViewById(R.id.txtMesssage);
          Button buttonOne = (Button) findViewById(R.id.block1);
          Button buttonTwo = (Button) findViewById(R.id.block2);
          Button buttonThree = (Button) findViewById(R.id.block3);
          Button buttonFour = (Button) findViewById(R.id.block4);
          Button buttonFive = (Button) findViewById(R.id.block5);
          Button buttonSix = (Button) findViewById(R.id.block6);



          // Attached Click Listener
          btnSend.setOnClickListener(this);

          buttonOne.setOnClickListener(this);
          buttonTwo.setOnClickListener(this);
          buttonThree.setOnClickListener(this);
          buttonFour.setOnClickListener(this);
          buttonFive.setOnClickListener(this);
          buttonSix.setOnClickListener(this);

    }
@Override
    public void onClick(View v) {

        }

        switch (v.getId()) {
        case R.id.block1:       

             break;
        case R.id.block2:

             break;
        case R.id.block3:

            break;
        case R.id.block4:

            break;
        case R.id.block5:

            break;
        case R.id.block6:

            break;
        }
     txtMessage.setText();
    }

    //functions below.
    ....     ....
    ...       ...
    ..         ..
    .     O     .
    ..         ..
    ...       ...
    ....     ....






在我的XML Layout keyboard.xml

<?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" 
android:background="@color/lightgrey">

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

<EditText
    android:id="@+id/txtMesssage"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    android:hint="Enter Message"
    android:textColor="@color/darkbrown" >
</EditText>

</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1.0"

    android:orientation="horizontal" >

    <Button
        android:id="@+id/block1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/white"
        android:layout_weight="1.0"
        android:text="Button one" />

    <Button
        android:id="@+id/block2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1.0"
        android:background="@color/blue"
        android:text="Button two" />

</LinearLayout>

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

    <Button
        android:id="@+id/block3"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1.0"
        android:background="@color/bg_gradient_end"
        android:text="Button three" />

    <Button
        android:id="@+id/block4"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1.0"
        android:background="@color/darkgrey"
        android:text="Button four" />

</LinearLayout>

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

    <Button
        android:id="@+id/block5"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1.0"
        android:background="@color/lightgrey"
        android:text="Button five" />

    <Button
        android:id="@+id/block6"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1.0"
        android:background="@color/bg_gradient_start"
        android:text="Button six" />

</LinearLayout>

到目前为止,我不想工作,所以我现在离开开关语句为空。请纠正我的代码或帮助我这个。感谢

The code that I have made so far is not working as I wanted it to, so I leave the switch statement blank for now. Please correct me on my codes or help me with this one. Thanks

我的计时码:

            Timer processTimer = new Timer();
        processTimer.schedule(new TimerTask() {
            public void run() {    
                processInput();    
            }

            private void processInput() {
                // TODO Auto-generated method stub
                map.put(getString(R.id.block1), "A");
                map.put(getString(R.id.block1) + getString(R.id.block2), "C");



            }
        }, 500); // Delay before processing. 

    processTimer.cancel();

    processTimer.schedule(new TimerTask() {
            public void run() {    
                processInput();    
            }

            private void processInput() {
                // TODO Auto-generated method stub
                map.get(R.id.block1);
                map.get(R.id.block1+R.id.block2);
                //this.close();


            }
        }, 500);

这是否正确?

推荐答案

我尝试使用类似于aptyp的建议的方法进行代码:

I tried to code with a method that similar to the suggestion by aptyp:

MainActivity.java:

MainActivity.java:

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
static long DELAY_TIME_INPUT = 500;
static int INPUT_TYPE_NORMAL = 0;
static int INPUT_TYPE_CAP = 1;
static int INPUT_TYPE_NUM = 2;

TextView txtMessage;
int[] mAlphabetTable1 = new int[]{1, 3, 9, 25, 17, 11, 27, 19, 10, 26,
                                5, 7, 13, 29, 21, 15, 31, 23, 14, 30,
                                37, 39, 58, 45, 61, 53};
int[] mSymbolTable1 = new int[]{2, 6, 4, 18, 36, 40, 50, 22, 38, 52, 54, 12};
/* Note: The value used below {8, 16, 20, 24} are just an example.
    I choose these values because they are not defined on the above tables.
  */
int[] mSpecialTable1 = new int[]{8, 16, 20, 24};

// char[] mAlphabetTable2 = new char[]{};
char[] mNumberTable2 = new char[]{'1', '2', '3', '4', '5', '6', '7', '8', '9', '0'};
char[] mSymbolTable2 = new char[]{',', ';', '\'', ':','-', '.', '.', '!', '"', '"','(','/'};
int mCurrentAlphabet = 0;
int mCurrentInputType = 0;
long mLastTimeStamp;

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

    Window window = this.getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
    window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
    window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
    // Init GUI
    txtMessage = (TextView) findViewById(R.id.txtMesssage);
    Button buttonOne = (Button) findViewById(R.id.block1);
    Button buttonTwo = (Button) findViewById(R.id.block2);
    Button buttonThree = (Button) findViewById(R.id.block3);
    Button buttonFour = (Button) findViewById(R.id.block4);
    Button buttonFive = (Button) findViewById(R.id.block5);
    Button buttonSix = (Button) findViewById(R.id.block6);
    // Attached Click Listener
    buttonOne.setOnClickListener(this);
    buttonTwo.setOnClickListener(this);
    buttonThree.setOnClickListener(this);
    buttonFour.setOnClickListener(this);
    buttonFive.setOnClickListener(this);
    buttonSix.setOnClickListener(this);
}

@Override
public void onClick(View view) {
    switch (view.getId()){
        case R.id.block1: mCurrentAlphabet |=1; break;
        case R.id.block2: mCurrentAlphabet |=2; break;
        case R.id.block3: mCurrentAlphabet |=4; break;
        case R.id.block4: mCurrentAlphabet |=8; break;
        case R.id.block5: mCurrentAlphabet |=16; break;
        case R.id.block6: mCurrentAlphabet |=32; break;
    }
    view.setBackgroundColor(Color.BLACK);
    Button btView = (Button) view;
    btView.setTextColor(Color.WHITE);
    mLastTimeStamp = System.currentTimeMillis();
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            long currentTimeStamp = System.currentTimeMillis();
            if(currentTimeStamp - mLastTimeStamp > DELAY_TIME_INPUT){
                genNewBrailleAlphabet();
            }
        }
    }, DELAY_TIME_INPUT + 10);
}

public void genNewBrailleAlphabet(){
    if(mCurrentAlphabet == 32 || mCurrentAlphabet == 60){ // Check if input is Cap or Num sign?
        if(mCurrentAlphabet == 32){ // Input is Cap sign.
            mCurrentInputType = INPUT_TYPE_CAP;
            TextView txtCap = (TextView) findViewById(R.id.cap);
            txtCap.setBackgroundColor(Color.GREEN);
        } else { // Input is Num sign.
            TextView txtNum = (TextView) findViewById(R.id.num);
            if(mCurrentInputType == INPUT_TYPE_NUM){
                mCurrentInputType = INPUT_TYPE_NORMAL; // Turn off Num sign.
                txtNum.setBackgroundColor(Color.TRANSPARENT);
            } else {
                mCurrentInputType = INPUT_TYPE_NUM; // Turn on Num sign.
                txtNum.setBackgroundColor(Color.GREEN);
            }
        }
    } else { // Input is not Cap or Num sign.
        byte currentAlphabetIndex = -1;
        char newAlphabet = 0;
        for (int i = 0; i < mAlphabetTable1.length; i++) {
            if (mAlphabetTable1[i] == mCurrentAlphabet) {
                currentAlphabetIndex = (byte) i;
                break;
            }
        }
        if(currentAlphabetIndex != -1) { // Check if input is Numbers or Alphabets?
            if (mCurrentInputType == INPUT_TYPE_NUM) { // Input is Numbers.
                if(currentAlphabetIndex < 10) {
                    newAlphabet = mNumberTable2[currentAlphabetIndex];
                }
            } else if (mCurrentInputType == INPUT_TYPE_CAP) // Input is Alphabets.
                newAlphabet = (char) (currentAlphabetIndex + 'A');
            else newAlphabet = (char) (currentAlphabetIndex + 'a');

            String msg = txtMessage.getText().toString() + newAlphabet;
            txtMessage.setText(msg);
        } else { // Input is not Numbers or Alphabets.
            for (int i = 0; i < mSymbolTable1.length; i++) {
                if (mSymbolTable1[i] == mCurrentAlphabet) {
                    currentAlphabetIndex = (byte) i;
                    break;
                }
            }
            if(currentAlphabetIndex != -1) { // Check if input is Punctuations?
                newAlphabet = mSymbolTable2[currentAlphabetIndex];
                if(currentAlphabetIndex == 8){ // Open Quote, Question Mark have the same pattern.
                    String tmpString = txtMessage.getText().toString();
                    if(tmpString.length() > 0 && !tmpString.endsWith(" ")){
                        // Last typed alphabet is not space, so this is Question Mark.
                        newAlphabet = '?';
                    }
                }
                String msg = txtMessage.getText().toString() + newAlphabet;
                txtMessage.setText(msg);
            } else { // Input is not Punctuations, so it is Special Action or undefined.
                for (int i = 0; i < mSpecialTable1.length; i++) {
                    if (mSpecialTable1[i] == mCurrentAlphabet) {
                        currentAlphabetIndex = (byte) i;
                        break;
                    }
                }
                if(currentAlphabetIndex != -1) { // Check if input is Special Action?
                    String msg = txtMessage.getText().toString();
                    // Input is Special Action
                    switch (currentAlphabetIndex) {
                        case 0: // Change focus here
                            // Change focus code
                            /* if (txtNumber.hasFocus()) {
                                txtMessage.requestFocus();
                            } else {
                                txtNumber.requestFocus();
                            } */
                            break;
                        case 1: // BackSpace
                            msg = msg.substring(0, msg.length() - 1);
                            txtMessage.setText(msg);
                            break;
                        case 2: // Space
                            msg = msg + " ";
                            txtMessage.setText(msg);
                            break;
                        case 3: // New Line
                            msg = msg + "\n";
                            break;
                    }
                    txtMessage.setText(msg);
                } else { // Input not defined.
                    Toast.makeText(getApplicationContext(), "Clicked button combination not defined!!", Toast.LENGTH_SHORT).show();
                }
            }
        }

        if(mCurrentInputType == INPUT_TYPE_CAP){
            TextView txtCap = (TextView) findViewById(R.id.cap);
            txtCap.setBackgroundColor(Color.TRANSPARENT);
            mCurrentInputType = INPUT_TYPE_NORMAL;
        }
    }
    // Reset button views ana variable for next alphabet.
    Button buttonOne = (Button) findViewById(R.id.block1);
    Button buttonTwo = (Button) findViewById(R.id.block2);
    Button buttonThree = (Button) findViewById(R.id.block3);
    Button buttonFour = (Button) findViewById(R.id.block4);
    Button buttonFive = (Button) findViewById(R.id.block5);
    Button buttonSix = (Button) findViewById(R.id.block6);
    buttonOne.setBackgroundColor(Color.WHITE);
    buttonTwo.setBackgroundColor(Color.WHITE);
    buttonThree.setBackgroundColor(Color.WHITE);
    buttonFour.setBackgroundColor(Color.WHITE);
    buttonFive.setBackgroundColor(Color.WHITE);
    buttonSix.setBackgroundColor(Color.WHITE);
    buttonOne.setTextColor(Color.BLACK);
    buttonTwo.setTextColor(Color.BLACK);
    buttonThree.setTextColor(Color.BLACK);
    buttonFour.setTextColor(Color.BLACK);
    buttonFive.setTextColor(Color.BLACK);
    buttonSix.setTextColor(Color.BLACK);
    mCurrentAlphabet = 0;
}}

activity_main.xml:

activity_main.xml:

<?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">

<ScrollView
    android:layout_weight="4.0"
    android:background="@color/lightgrey"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

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

        <TextView
            android:id="@+id/txtMesssage"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:textColor="@color/darkbrown" >
        </TextView>
    </LinearLayout>
</ScrollView>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1.0"
    android:orientation="horizontal"
    android:baselineAligned="false"
    android:layout_marginTop="15dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1.0"
        android:background="#000000"
        android:orientation="vertical" >

        <TextView
            android:text="CAP"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/cap"
            android:layout_weight="1.3"
            android:gravity="center"
            android:textSize="20sp" />

        <Button
            android:id="@+id/block1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1.0"
            android:background="#ffffff"
            android:text="Button one" />

        <Button
            android:id="@+id/block2"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1.0"
            android:background="#ffffff"
            android:text="Button two" />

        <Button
            android:id="@+id/block3"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1.0"
            android:background="#ffffff"
            android:text="Button three" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1.0"
        android:orientation="vertical"
        android:background="#000000">

        <TextView
            android:text="Num"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/num"
            android:layout_weight="1.3"
            android:gravity="center"
            android:textSize="20sp" />

        <Button
            android:id="@+id/block4"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1.0"
            android:background="#ffffff"
            android:text="Button four" />

        <Button
            android:id="@+id/block5"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1.0"
            android:background="#ffffff"
            android:text="Button five" />

        <Button
            android:id="@+id/block6"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1.0"
            android:background="#ffffff"
            android:text="Button six" />

    </LinearLayout>

</LinearLayout>

请注意,我正在使用处理程序而不是计时器希望它有帮助!

Please note that I am using handler instead of timer. Hope it help!

这篇关于Android:一个接一个地点击一到六个按钮,将不同的结果串在一起的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆