First, I have multiple EditTexts in a Framelayout which wrapped by a ScollView.
I already use below code to let ScrollView scroll up when keyboard is shown -
((Activity) getContext()).getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
Also, I tried ADJUST_PAN in above code and nothing changed.
Here is the problem - when I typing in one of those EditTexts, the ScrollView scrolled up automatically which lead to my current editing EditText invisible.
I'm wondering why did this happened? Is my current editing EditText lost focus when typing on the keyboard? And how do I fix it?
By the way I didn't using any xml for the layout. All layouts are written in Java.
The main layout is -
public class PoorEditScroll extends ScrollView {
PoorEdit poorEdit;
public PoorEditScroll(Context context) {
super(context);
initUI();
}
public PoorEditScroll(Context context, AttributeSet attrs) {
super(context, attrs);
initUI();
}
private void initUI(){
setScrollContainer(false);
poorEdit = new PoorEdit(getContext());
this.addView(poorEdit);
}
this.addView(poorEdit);
}
public void toJson(String s) {
poorEdit.toJson(s);
}
public void loadJson(String s) {
poorEdit.loadJson(s);
}
class PoorEdit extends LinearLayout {
private EditView editView;
public PoorEdit(Context context) {
super(context);
initUI();
}
public PoorEdit(Context context, AttributeSet attrs) {
super(context, attrs);
initUI();
}
private void initUI(){
this.setOrientation(VERTICAL);
LayoutParams layoutParams = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
this.setLayoutParams(layoutParams);
DisplayMetrics dm = getContext().getResources().getSystem().getDisplayMetrics();
this.setMinimumHeight(dm.heightPixels);
// TODO: 15/11/25 Override OnMeasure in EditView
editView = new EditView(getContext());
this.addView(editView);
((Activity) getContext()).getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
}
public void loadJson(String folderPath){
editView.loadJson(folderPath);
}
public String toJson(String dest){
return editView.toJson(dest);
}
}
And the EditView
is -
public class EditView extends FrameLayout implements View.OnDragListener {
public static BaseContainer poorBoy;
private BaseContainer lastAdd = null;
public EditView(Context context) {
super(context);
initUI();
}
public EditView(Context context, AttributeSet attrs) {
super(context, attrs);
initUI();
}
private void initUI(){
this.setOnDragListener(this);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0, 1);
this.setLayoutParams(layoutParams);
//Call addView to add a EditText in this function.
addTextOn(0, 0, Constants.eleWidth, Constants.eleHeight);
}
}