2015-06-20 44 views
0

我想用我的应用程序中的字母。字母出现按钮消失

enter image description here

我试着用TextViews和按钮的一切。我使用了GridView和GridLayout,但没有奏效。我可以让按钮消失,按钮的文字出现。我的主要问题是,当我点击“a”字母时,它会出现在第二个框中,因为有正确的位置。但它会出现在第一个框中。所以我不能让字母出现顺序,因为我点击。如果有人有一个想法如何做,请回应。

这里是我的代码:

int fillFactor = -1; 

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

    final String word = "SAMSUNG"; 
    final LinearLayout linear = (LinearLayout)findViewById(R.id.linear); 


    for(int i=0;i<word.length();i++){ 
     Button b = new Button(this); 
     b.setTag(word.charAt(i)); 
     b.setLayoutParams(new LinearLayout.LayoutParams(48,48)); 
     linear.addView(b); 
    } 



    for(int j=0;j<word.length();j++){ 
     Button bn = new Button(this); 
     bn.setTag(word.charAt(j)); 
     bn.setLayoutParams(new LinearLayout.LayoutParams(48,48)); 
     linear.addView(bn); 
     bn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       if(fillFactor < word.length()) 
        fillFactor++; 
       Button view = null; 
       Button clickedview = view; 
       //find a correct button 
       Button leftButton = ((Button)linear.getChildAt(fillFactor)); 
       if((boolean)leftButton.getTag().equals((String)clickedview.getTag())); 
       leftButton.setText((CharSequence) clickedview.getTag()); 

       if(checkComplete()) moveToNextWordActivity(); 
       else { 
        Toast.makeText(MainActivity.this, "Invalid character", Toast.LENGTH_LONG).show(); 
        fillFactor--; 
       } 

       } 

      private boolean checkComplete() { 
       return fillFactor == word.length() - 1; 
      } 

      private void moveToNextWordActivity() { 

      } 

     }); 
    } 

}}

回答

1

我的想法是这样的: 做出Button数组,你需要查找的单词的字母。 忘记初始化onCreate()上的所有按钮。

此外,制作一个尺寸相同的int阵列。

Button[] letters = new Button[size]; 
int[] arr = new int[size]; 

将数组中的所有数字都设置为0;

for(int i = 0; i < size; i++) 
{ 
    arr[i] = 0; 
} 

现在,每次用户按下一个字母,搜索第一变量等于0,让我们把它叫做i。 在i改变Button的数组中的文本到你需要的文字和inti为1

@Override 
public void onClick(View v) 
{ 
    for(int i = 0; i < size; i++) 
    { 
     if(arr[i] == 0) 
     { 
      arr[i] = 1; 
      letters[i].setText(view.getText().toString()); 
      break; 
     } 
    } 
    if(arr[size-1] == 1) 
    { 
     test(); 
    } 
} 

//我建议检查所有阵列的情况下,用户删除的一个中间的字母,但它也会这样工作。我现在是为了简单 ,这个词的所有字母。 当最后一个字母被放置时,函数test()将被调用。

此功能将得到信并上交成字(String):

public void test() 
{ 
    String word = ""; 
    for(int i = 0; i < size; i++) 
    { 
     word += letters[i].getText().toString(); 
    } 
    if(word == requested_word) 
    { 
     doSomething(); // winning notification or what you need to do 
    } 
} 

requested_word是你需要查找的单词。

请记住,你可以做得更好,这是基本的概念。 alse,我没有使用ide来检查代码,我可能有一些错误。

晚安,并保持编码;)

+0

非常感谢您的回答。我试过了,我认为这是工作,但现在我有一个代码问题。我使用按钮而不是ImageButtons。我有在屏幕顶部没有文字的按钮,我有下面的文本按钮。我必须使与按钮对具有变量的数组,我必须与变量和按钮配对。 –

+0

对将在最后。在检查完所有按钮填满后,检查所创建的文本是否是您需要的单词。我会编辑我的答案,以解释 – Amirag

+0

如果你不明白的东西,只是问:) – Amirag

0

例如,您可能有'SAMSUNG'字。

初始化它包含了所有的按钮

String word = "SAMSUNG"; 
LinearLayout linear = new LinearLayout(context);// or use findViewById 
// make linear layout horizontal 

添加填充按钮父:

for(int i=0;i<word.length();i++){ 
    Button b = new Button(context); 
    b.setTag(word.charAt(i)); 
    b.setLayoutParams(new LinearLayout.LayoutParams(48,48)); 
    linear.addView(b); 
} 

键盘按钮以同样的方式添加:在标签相关的字符集。

初始化填充因子值:

int fillFactor = -1; 

当你点击任何按钮键盘:

OnClick(...) { 
if(fillFactor < word.length()) 
    fillFactor++; 
Button clickedView = view; 
//find a correct button        
Button leftButton = ((Button)linear.getChildAt(fillFactor)); 
if((String)leftButton.getTag().equals((String)clickedView.getTag()) 
    leftButton.setText(clickedView.getTag()); 
    if(checkComplete()) moveToNextWordActivity(); 
else { 
    showErrorToast("Invalid character"); 
    fillFactor--; 
} 
} 

public boolean checkComplete() { 
    return fillFactor == word.length - 1; 
} 
+0

非常感谢您的回答!这不起作用,但我认为我以错误的方式使用了你的代码。我复制我的代码,如果能帮助我解决问题,我将非常感激。 –

0

我不能完全肯定,如果我得到你的观点,但如果你尝试要使用屏幕按钮上的按钮作为一种单向键盘(每个按钮只能按下一个按钮,并且按照按钮点击的顺序显示相同的顺序),那么我会这样实现它:

  • 介绍保存您尝试输入
  • 一个侦听器添加到您的“OneWayKeyboard”的每一个按钮,将首先对按钮添加人物造型给你单词的字当前指数的成员变量输入(与成员变量指标的帮助下),之后设置按钮来INVISIBLE

的知名度。如果你想拥有一个先进和干净的解决方案,我建议建立对这个词的CompoundView这是键入以及“OneWayKeyboard”的一个。如果您想了解如何在Android中创建视图,请参阅Lars Vogel的以下教程: http://www.vogella.com/tutorials/AndroidCustomViews/article.html

+0

谢谢你的回答!我已经有了一个解决方案,但你发送的链接非常有用! –