评论功能

1.布局

<ListView
    android:id="@+id/listView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/ll"
    android:visibility="visible"></ListView>

<LinearLayout
    android:id="@+id/ll"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:visibility="visible">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:text="发送"
        android:onClick="send"/>

    <EditText
        android:id="@+id/et"
        android:layout_width="match_parent"
        android:layout_height="50dp" />

</LinearLayout>

2.逻辑代码

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);

        linearLayout = (LinearLayout) findViewById(R.id.ll);

        onGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                //判断窗口可见区域大小
                Rect r = new Rect();
                getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
                //如果屏幕高度和Window可见区域高度差值大于整个屏幕高度的1/3,则表示软键盘显示中,否则软键盘为隐藏状态。
                heightDifference = 1920 - (r.bottom - r.top);

//                Toast.makeText(ListActivity.this, "键盘高度:" + heightDifference, Toast.LENGTH_SHORT).show();
            }
        };

        //注册布局变化监听
        getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener);

        listView = (ListView) findViewById(R.id.listView);
        MyAdapter adapter = new MyAdapter();
        listView.setAdapter(adapter);
        editText = (EditText) findViewById(R.id.et);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(final AdapterView<?> parent, View view, final int position, long id) {

                tanchu();
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        listView.setSelectionFromTop(position, 1920 - heightDifference - dip2px(50 + 130));
                    }
                }, 400);

            }
        });

    }

    public int dip2px(float dpValue) {
        final float scale = this.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }

    @Override
    protected void onDestroy() {
        //移除布局变化监听
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            getWindow().getDecorView().getViewTreeObserver().removeOnGlobalLayoutListener(onGlobalLayoutListener);
        } else {
            getWindow().getDecorView().getViewTreeObserver().removeGlobalOnLayoutListener(onGlobalLayoutListener);
        }
        super.onDestroy();
    }

    private void tanchu() {
        linearLayout.setVisibility(View.VISIBLE);

        editText.requestFocus();
        InputMethodManager imm = (InputMethodManager) editText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
    }

    public void send(View view) {

        linearLayout.setVisibility(View.INVISIBLE);
//        InputMethodManager imm = (InputMethodManager) editText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
//        imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
    }
 
 
注解:主要是测量软键盘的高度, 例外还有一个关键方法:
listView.setSelectionFromTop(position, y);

猜你喜欢

转载自blog.csdn.net/qq1073273116/article/details/52514002