Как реализовать это в Android

Я новичок в Android.Can, кто-нибудь скажет мне, что это за технология? Я хочу добавить эту функцию в поле пароля. Могу ли я узнать, что является правильным способом для достижения моей цели? Можете ли вы помочь мне с любым кодом или ссылкой на руководство по правильному внедрению?

Ответ 1

У вас есть много возможностей для создания такого макета:

  • Родитель RelativeLayout, a LinearLayout с четырьмя точками вверху, а внизу отображаются ваши представления с атрибутами как toLeftOf, toRightOf и т.д. - создайте метод onClickListener, чтобы изменить их состояние и сохранить номер.
  • Несколько LinearLayout с атрибутами weight для заполнения всего пространства, и каждое из видов (округленное число) заполняет пробел (см. пример ниже, чтобы понять атрибут веса) - или несколько RelativeLayout - или даже TableLayout.
  • Или LinearLayout и GridView ниже с помощью метода ItemClickListener.

Согласно комментариям ниже вашего вопроса, есть много возможностей. Я выбираю один из них с Linear и RelativeLayout. Это может быть примерно так:

<!-- named activity_main.xml -->
<RelativeLayout
    ... >
    <LinearLayout
        android:id="@+id/contain"
        ... android:layout_width="250dip"
        android:orientation="horizontal"
        android:weightSum="4" >
        <!-- weightSum to 4 = whatever the screen, display 
             my children views in 4 sections -->
        <View
            ... android:layout_weight="1"
            android:background="@drawable/green_dots" />
        <!-- weight to 1 = this takes one section -->
        <View
            ... android:layout_weight="1"
            android:background="@drawable/green_dots" />
        <!-- weight to 1 = this takes one section -->
        <View
            ... android:layout_weight="1"
            android:background="@drawable/green_dots" />
        <View
            ... android:layout_weight="1"
            android:background="@drawable/green_dots" />
    </LinearLayout>
    <RelativeLayout
        android:layout_below="@id/contain" ... >
        ... Here display your buttons (or textviews) with 
            custom drawable background for each one
</RelativeLayout>  

И в вашем классе Activity он реализует onClickListener следующим образом:

public class MyActivity extends Activity implements OnClickListener { }

Затем в ваших методах внутри этого действия:

// init your buttons var
Button one, two, three, four, five ...;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // set the layout above
    setContentView(R.layout.activity_main);
    // init your buttons
    one = (Button) findViewById(R.id.button1);
    two = (Button) findViewById(R.id.button2);
    three = (Button) findViewById(R.id.button3);
    ... etc.

    // set them to your implementation
    one.setOnClickListener(this);
    two.setOnClickListener(this);
    three.setOnClickListener(this);
    ... etc.
}

// call this function when one button is pressed
public void onClick(View view) {
    // retrieves the id of clicked button
    switch(view.getId()) {
        case R.id.button1:
             methodToSaveNumber(int);
        break;
        case R.id.button2:
             methodToSaveNumber(int);
        break;
        case R.id.button3:
             methodToSaveNumber(int);
        break;
        ... etc.
    }
}

Затем в вашем методе methodToSaveNumber:

// finally, your method to save the number of the password
public void methodToSaveNumber(int i) {
    ... do something. 
    ... change the state of the buttons, the dots, whatever you want
}  

И чтобы показать вам, как это работает, вытачиваемый green_dots может быть таким:

<?xml version="1.0" encoding="utf-8"?>
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <!-- radius -->
    <corners
        android:radius="20dp" />
    <!-- border -->
    <stroke 
        android:color="@android:color/green"
         android:width="2dp" />
    <!-- background (transparent) -->
    <solid 
         android:color="#00000000" />
</shape>  

Вы должны сообщить вам о макетах и о том, как это работает, click event и его прослушиватель, чертежи и их состояния (сфокусированные, нажатые, отключенные,...) и, наконец, Надеюсь, вы получите то, что хотите.

Счастливое кодирование!