package com.com.mr_wrong.RecyclerView; import android.content.Context; import android.graphics.Rect; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.TextView; import com.Utils.LogUtils; import com.example.mr_wrong.androidstudioproject.R; import java.util.ArrayList; import java.util.List; import butterknife.ButterKnife; import butterknife.InjectView; /** * Created by Mr_Wrong on 15/7/25. */ public class MyRecycleViewActivity extends AppCompatActivity { @InjectView(R.id.edittext) EditText edittext; private RecyclerView mRecycleView; private Context mContext; private List<String> mydatas; private List<Integer> mHeights; private LayoutInflater mLayoutinflater; List<String> mDatas; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_single_recyclerview); ButterKnife.inject(this); fun(); edittext.post(new Runnable() { @Override public void run() { InputMethodManager m = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); m.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); } }); mRecycleView = (RecyclerView) findViewById(R.id.id_recyclerview); initData(); mRecycleView.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); if (dy > 0) {//上 show(); } else {//下滑 hide(); } } }); mRecycleView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)); mRecycleView.setLayoutManager(new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL)); mRecycleView.setItemAnimator(new DefaultItemAnimator()); mRecycleView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST)); mRecycleView.setAdapter(new MyRectcleAdapter(this, mDatas)); } private void hide() { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(edittext.getWindowToken(), 0); //强制隐藏键盘 } private void show() { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(edittext, InputMethodManager.SHOW_FORCED); } private void initData() { mDatas = new ArrayList<String>(); for (int i = 'A'; i < 'z'; i++) { mDatas.add("" + (char) i); } } class MyRectcleAdapter extends RecyclerView.Adapter<MyRectcleAdapter.MyViewHolder> { public MyRectcleAdapter(Context context, List<String> datas) { mContext = context; mydatas = datas; mLayoutinflater = LayoutInflater.from(context); mHeights = new ArrayList<>(); for (int i = 0; i < mydatas.size(); i++) { mHeights.add((int) (100 + Math.random() * 300)); } } @Override public int getItemCount() { return mydatas.size(); } @Override public void onBindViewHolder(MyViewHolder holder, int position) { ViewGroup.LayoutParams lp = holder.tv.getLayoutParams(); lp.height = mHeights.get(position); holder.tv.setText(mydatas.get(position)); holder.tv.setLayoutParams(lp); } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new MyViewHolder(mLayoutinflater.inflate(R.layout.item_staggered_home, parent, false)); } class MyViewHolder extends RecyclerView.ViewHolder { TextView tv; public MyViewHolder(View itemView) { super(itemView); tv = (TextView) itemView.findViewById(R.id.id_num); } } } //判断是否显示键盘 private boolean fun() { final boolean[] visible = new boolean[1]; final View decorView = getWindow().getDecorView(); decorView.getViewTreeObserver().addOnGlobalLayoutListener( new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Rect rect = new Rect(); decorView.getWindowVisibleDisplayFrame(rect); int displayHeight = rect.bottom - rect.top; int hight = decorView.getHeight(); visible[0] = (double) displayHeight / hight < 0.8; LogUtils.e("是否可见:" + visible[0]); } }); return visible[0]; } }