Виджет NumberPicker
от Android - вертикальный, с кнопками увеличения и уменьшения выше и ниже номера.
Можно ли сделать его горизонтальным? С помощью кнопок слева и справа от номера?
Виджет NumberPicker
от Android - вертикальный, с кнопками увеличения и уменьшения выше и ниже номера.
Можно ли сделать его горизонтальным? С помощью кнопок слева и справа от номера?
Вы не можете изменить NumberPicker
AFAIK, но писать свои собственные должно быть довольно просто.
Один RelativeLayout
2 Buttons
один EditText/TextView
с причудливым фоном между ними и там вы идете. Установка MIN
и MAX
, переопределяя onClickListener()
s. Немного тестов. Что это.
Неа. На самом деле вы даже не можете его использовать, даже если он появляется в построителе графического макета. Он все еще защищен.
У этого вопроса есть некоторая связанная информация: Диалоговое окно выбора номера Android
Я не смог найти надежное решение, поэтому в конце концов я сделал свой собственный, но мне нужно, чтобы он выглядел как круговой винт, поэтому он адаптировался для этого варианта использования.
Вы можете получить идею от источника, хотя.. Вот он:
android: вращение = "от 90" до 90 градусов, или, как вам нравится, значение может быть отрицательным, оно будет вращать вид, но.
Я искал похожее решение и создал реализацию на основе скриншота в этом вопросе. Имейте в виду, что это довольно простой и позволит учесть целые числа и установить минимальное и максимальное значение. (Любые дополнительные функции вам нужно будет добавить самостоятельно.)
Вот как это будет выглядеть:
Вам нужен файл макета и файл класса для пользовательского компонента, а затем вы можете использовать его в других файлах макета (и класса).
Файл макета: numberpicker_horizont.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="horizontal">
<Button
android:id="@+id/btn_less"
android:layout_width="0sp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="-" />
<EditText
android:id="@+id/et_number"
android:layout_width="0sp"
android:layout_height="match_parent"
android:layout_weight="1"
android:textAlignment="center"
android:inputType="number"
android:text="0" />
<Button
android:id="@+id/btn_more"
android:layout_width="0sp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="+" />
</LinearLayout>
Файл класса: HorizontalNumberPicker.java
public class HorizontalNumberPicker extends LinearLayout {
private EditText et_number;
private int min, max;
public HorizontalNumberPicker(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
inflate(context, R.layout.numberpicker_horizontal, this);
et_number = findViewById(R.id.et_number);
final Button btn_less = findViewById(R.id.btn_less);
btn_less.setOnClickListener(new AddHandler(-1));
final Button btn_more = findViewById(R.id.btn_more);
btn_more.setOnClickListener(new AddHandler(1));
}
/***
* HANDLERS
**/
private class AddHandler implements OnClickListener {
final int diff;
public AddHandler(int diff) {
this.diff = diff;
}
@Override
public void onClick(View v) {
int newValue = getValue() + diff;
if (newValue < min) {
newValue = min;
} else if (newValue > max) {
newValue = max;
}
et_number.setText(String.valueOf(newValue));
}
}
/***
* GETTERS & SETTERS
*/
public int getValue() {
if (et_number != null) {
try {
final String value = et_number.getText().toString();
return Integer.parseInt(value);
} catch (NumberFormatException ex) {
Log.e("HorizontalNumberPicker", ex.toString());
}
}
return 0;
}
public void setValue(final int value) {
if (et_number != null) {
et_number.setText(String.valueOf(value));
}
}
public int getMin() {
return min;
}
public void setMin(int min) {
this.min = min;
}
public int getMax() {
return max;
}
public void setMax(int max) {
this.max = max;
}
}
Затем включите его в другие файлы макета следующим образом (заменив com.yourpackage на собственное имя пакета):
<com.yourpackage.HorizontalNumberPicker
android:id="@+id/np_channel_nr"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
Затем вы можете использовать компонент, как и любой другой компонент, и использовать метод getValue(), чтобы получить текущее значение:
// get a reference to the component
final HorizontalNumberPicker np_channel_nr = dialogView.findViewById(R.id.np_channel_nr);
// use value in your code
final int nr = np_channel_nr.getValue();