我正在尝试模仿新的Oreo TimePicker
我创建了布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/hour_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText
android:id="@+id/hour_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="2"
android:textAlignment="center"
android:focusable="true"/>
<TextView
android:id="@+id/textView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="hour" />
</LinearLayout>
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center_vertical"
android:paddingBottom="10dp"
android:text=":"
android:textSize="24sp" />
<LinearLayout
android:id="@+id/minute_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:id="@+id/minute_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="2"
android:textAlignment="center" />
<TextView
android:id="@+id/textView5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="minute" />
</LinearLayout>
<Spinner
android:id="@+id/ampm_spinner"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_weight="1" />
我还创建了支撑班(设置器和Geters未包括以下:
public class ManualTimePicker extends LinearLayout {
private final static String TAG = "ManualTimePicker():";
TextView hour;
TextView minute;
Spinner ampm;
private Integer fieldInputType;
public ManualTimePicker(Context context) {
super(context);
init(context);
}
public ManualTimePicker(Context context, @Nullable AttributeSet
attributeSet) {
super(context, attributeSet);
TypedArray attrs = context.obtainStyledAttributes
(attributeSet, R.styleable.ManualTimePicker, 0, 0);
fieldInputType = attrs.getInt
(R.styleable.ManualTimePicker_H_android_text,InputType.TYPE_CLASS_NUMBER);
attrs.recycle();
init(context);
}
public ManualTimePicker
(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
public ManualTimePicker
(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init(context);
}
private void init(final Context context) {
View.inflate(context, R.layout.manual_time_picker, this);
setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS);
hour = findViewById(R.id.hour_input);
minute = findViewById(R.id.minute_input);
hour.setText("7");
minute.setText("00");
hour.setFocusable(true);
hour.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Log.d(TAG, "Hour field is clicked");
hour.requestFocus();
}
});
hour.setInputType(fieldInputType);
ampm = findViewById(R.id.ampm_spinner);
final ArrayAdapter methodAdapter =
ArrayAdapter.createFromResource(getContext(),
R.array.ampm,android.R.layout.simple_spinner_item);
methodAdapter.setDropDownViewResource
(android.R.layout.simple_spinner_dropdown_item);
ampm.setAdapter(methodAdapter);
SimpleDateFormat dateFormat = new SimpleDateFormat("aa");
String formattedDate = dateFormat.format(new Date());
if(formattedDate.equals("AM"))
ampm.setSelection(0);
else
ampm.setSelection(1);
}
@Override
public boolean onTouchEvent(final MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_UP){
return performClick();
}
return true;
}
现在,我有一个问题是EditTexts
根本不起作用 - 当我单击它们时,它们会获得一秒钟的焦点,我看到光标眨了眨眼,然后再次"黑暗"。requestFocus()
也不起作用。
如何使这两个edittext
像普通的编辑文本一样行动?我实施了Getters和Setter,因此获得并设置该值并不是一个问题,但是我看不到它们正确地行动。
谢谢!
将其更改为
TextView hour;
TextView minute;
hour = findViewById(R.id.hour_input);
minute = findViewById(R.id.minute_input);
这个。
EditText hour;
EditText minute;
hour = (EditText)findViewById(R.id.hour_input);
minute = (EditText)findViewById(R.id.minute_input);
i删除
setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS);
解决了问题。看来我没有正确阅读自己使用的教程。这就是它的作用 - 有人可以解释DescendantFocusability = AfterDescendants吗?