【个人笔记】解决fixed布局,安卓软键盘会顶起底部固定的按钮的问题

1.问题

  • fixed布局的tab栏在安卓浏览器上,聚焦在输入框时,弹出的输入框会将tab栏顶到输入框上方,挡住页面。
  • fixed定位的tab栏
  • 出现的键盘将tab栏顶到页面中间

2.思路

  • 监听键盘弹出的事件…也就是监听页面的可见高度clientHeight
  • 先保存页面最初的可见高度,然后监听高度变化(resize),当新的高度小于原来的高度时,判断是键盘弹出
  • 键盘弹出时将tab栏隐藏起来
  • 实现效果

  • 代码如下,在全局(app.vue)添加
mounted() {
   
  window.addEventListener('resize', this.getShowHeight)
  },
beforeDestroy() {
   
    window.removeEventListener('resize', this.getShowHeight)
  },
methods: {
   
    getShowHeight() {
   
      this.showHeight = document.documentElement.clientHeight || document.body.clientHeight
      const diff = this.docmHeight - this.showHeight
      if (this.docmHeight > this.showHeight && diff > 120) {
   
        // 隐藏
        this.hideshow 
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是实现步骤: 1. 在 Android Studio 中创建一个新的项目,选择 Empty Activity。 2. 在项目的 build.gradle 文件中添加以下依赖: ``` implementation 'androidx.recyclerview:recyclerview:1.2.0' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.sqlite:sqlite:2.1.0' ``` 3. 在布局文件中添加两个 EditText 和四个 Button,用于输入和操作笔记。 4. 创建一个 Note 类,用于存储笔记的信息,包括标题和内容。 5. 创建一个 NotesAdapter 类,用于将笔记列表显示在 RecyclerView 中。 6. 在 MainActivity 中,使用 SQLiteOpenHelper 创建一个名为 notes.db 的数据库,并创建一个名为 notes 的表,用于存储笔记信息。 7. 在 MainActivity 中,实现对笔记的增删改查操作,并更新 RecyclerView 的显示。 以上就是实现增删改查功能的大致步骤,具体实现细节可参照以下代码示例: Note.java: ``` public class Note { private int id; private String title; private String content; public Note() {} public Note(int id, String title, String content) { this.id = id; this.title = title; this.content = content; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } } ``` NotesAdapter.java: ``` public class NotesAdapter extends RecyclerView.Adapter<NotesAdapter.NoteViewHolder> { private List<Note> notes; public NotesAdapter(List<Note> notes) { this.notes = notes; } @NonNull @Override public NoteViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_note, parent, false); return new NoteViewHolder(view); } @Override public void onBindViewHolder(@NonNull NoteViewHolder holder, int position) { Note note = notes.get(position); holder.titleTextView.setText(note.getTitle()); holder.contentTextView.setText(note.getContent()); } @Override public int getItemCount() { return notes.size(); } static class NoteViewHolder extends RecyclerView.ViewHolder { TextView titleTextView; TextView contentTextView; public NoteViewHolder(@NonNull View itemView) { super(itemView); titleTextView = itemView.findViewById(R.id.titleTextView); contentTextView = itemView.findViewById(R.id.contentTextView); } } } ``` MainActivity.java: ``` public class MainActivity extends AppCompatActivity { private EditText titleEditText; private EditText contentEditText; private Button addButton; private Button updateButton; private Button deleteButton; private Button queryButton; private RecyclerView notesRecyclerView; private NotesAdapter notesAdapter; private List<Note> notes = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); titleEditText = findViewById(R.id.titleEditText); contentEditText = findViewById(R.id.contentEditText); addButton = findViewById(R.id.addButton); updateButton = findViewById(R.id.updateButton); deleteButton = findViewById(R.id.deleteButton); queryButton = findViewById(R.id.queryButton); notesRecyclerView = findViewById(R.id.notesRecyclerView); notesRecyclerView.setLayoutManager(new LinearLayoutManager(this)); notesAdapter = new NotesAdapter(notes); notesRecyclerView.setAdapter(notesAdapter); SQLiteOpenHelper dbHelper = new SQLiteOpenHelper(this, "notes.db", null, 1) { @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE notes (_id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, content TEXT)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }; addButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String title = titleEditText.getText().toString(); String content = contentEditText.getText().toString(); if (title.isEmpty() || content.isEmpty()) { Toast.makeText(MainActivity.this, "标题和内容不能为空", Toast.LENGTH_SHORT).show(); } else { SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("title", title); values.put("content", content); db.insert("notes", null, values); Toast.makeText(MainActivity.this, "添加成功", Toast.LENGTH_SHORT).show(); titleEditText.setText(""); contentEditText.setText(""); updateNotes(); } } }); updateButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String title = titleEditText.getText().toString(); String content = contentEditText.getText().toString(); if (title.isEmpty() || content.isEmpty()) { Toast.makeText(MainActivity.this, "标题和内容不能为空", Toast.LENGTH_SHORT).show(); } else { SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("title", title); values.put("content", content); db.update("notes", values, "_id=?", new String[]{String.valueOf(notes.get(0).getId())}); Toast.makeText(MainActivity.this, "更新成功", Toast.LENGTH_SHORT).show(); titleEditText.setText(""); contentEditText.setText(""); updateNotes(); } } }); deleteButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SQLiteDatabase db = dbHelper.getWritableDatabase(); db.delete("notes", "_id=?", new String[]{String.valueOf(notes.get(0).getId())}); Toast.makeText(MainActivity.this, "删除成功", Toast.LENGTH_SHORT).show(); titleEditText.setText(""); contentEditText.setText(""); updateNotes(); } }); queryButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { updateNotes(); } }); } private void updateNotes() { SQLiteDatabase db = new SQLiteOpenHelper(this, "notes.db", null, 1).getReadableDatabase(); Cursor cursor = db.query("notes", null, null, null, null, null, null); if (cursor.moveToFirst()) { notes.clear(); do { int id = cursor.getInt(cursor.getColumnIndex("_id")); String title = cursor.getString(cursor.getColumnIndex("title")); String content = cursor.getString(cursor.getColumnIndex("content")); notes.add(new Note(id, title, content)); } while (cursor.moveToNext()); notesAdapter.notifyDataSetChanged(); titleEditText.setText(notes.get(0).getTitle()); contentEditText.setText(notes.get(0).getContent()); } else { Toast.makeText(this, "没有数据", Toast.LENGTH_SHORT).show(); } cursor.close(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值