如何在edittext中为每个字符加下划线?

时间:2016-06-10 18:36:03

标签: android android-edittext

我正在尝试在android中写一个像hangman这样的猜词游戏。 让我们说这个词是'苹果'。我想显示5个下划线,告诉玩家这个单词是5个字符长,并且它们应该像下面那样显示/填充

enter image description here

我想不出一种容易做到这一点的方法。我发现this与我正在寻找的完全相同,但没有给出答案,并且不知何故获得了大量的支持。

我最初的想法是创建带有下划线的edittext作为提示并循环遍历所有字符。这将根据多少个字符创建#texttext,但是一旦填充了char,下划线就会消失,我需要在删除/填充char时创建指向上一个/下一个edittext的链接。

关于如何实现这一目标的任何想法?或者有一个lib使用?非常感谢你!!

3 个答案:

答案 0 :(得分:3)

我认为您不需要使用edittext来实现它。您可以在布局中添加一个水平线性布局,其中不包含任何视图。

并且您可以创建一个布局,该布局将作为视图填充在水平线性布局中。 (那个名字可以是row_word)这个布局将包括每个edittext下面的下划线。您可以使用linearlayout来实现它。

在您的片段中,您可以编写一个类似下面的填充方法:

public class Character
{
    public String char;

    public boolean isFilled;

}

 ArrayList<Character> words = new ArrayList();
 words.addAll(_yourWords);

 linearlayout.removeAllViews();
 for(int i = 0 ; i < words.size(); i++)
    {
        LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = inflater.inflate(R.layout.row_word, horizontalLinearLayout, false);

        EditText editText = v.findViewById(R.id.textView);
        //you must declare focusable and focusableintouchmode values false in 
        //the your row_word
        if(!word.isFilled)
        {
          edittext.setFocusable(true);
          edittext.setFocusableontouhcmode(true);
          editText.requestFocus();
        }
         else{
          edittext.setFocusable(false);
          edittext.setFocusableontouhcmode(false);
          edittext.clearfocus();
         } 



      edittex.setOnFocusChangeListener(new OnFocusChangeListener() {
      public void onFocusChange(View v, boolean hasFocus) {
      populate();
      } 

        .
        .
        .
        .
        .
        .

        horizontalLinearLayout.addView(v);

    }

如果你想在你的row_word中使用textview,那么在你的活动中覆盖下面的方法,从键盘中获取按下的键值(当然使用界面)。否则你不需要使用下面的代码。

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    Log.i("key pressed", String.valueOf(event.getKeyCode()));
    return super.dispatchKeyEvent(event);
    callBack.setValue(String.valueOf(event.getKeyCode())

}

您的界面如下:

public interface pressedKeyCallback {

void onKeyPressed(String pressedKey);}

显示键盘:

InputMethodManager imm = (InputMethodManager)
                                 getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm != null){
        imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);
    }

答案 1 :(得分:1)

默认情况下,EditText有一个下划线,因此您可以只编辑样式中的颜色以使其更暗。以你的风格添加这些。

<item name="android:textColorSecondary">@android:color/black</item>
<item name="colorAccent">@android:color/black</item>

我还要添加这个,这样你就没有那个闪烁的光标。

editText.setCursorVisible(false);

答案 2 :(得分:-1)

我认为你应该使用edittext的内置提示功能。检查this