You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android Studio中添加带外部链接的垂直三点省略号菜单?

在Android Studio中实现垂直三点菜单并跳转外部网站

1. 创建菜单资源文件

  • 右键点击res目录 → 新建 → Android Resource Directory,选择menu类型,确认创建res/menu文件夹。
  • 右键menu文件夹 → 新建 → Menu Resource File,命名为menu_vertical_dot.xml,写入以下内容:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/menu_item_website1"
        android:title="访问官网"/>
    <item
        android:id="@+id/menu_item_website2"
        android:title="查看文档"/>
    <item
        android:id="@+id/menu_item_website3"
        android:title="反馈问题"/>
</menu>

2. 在布局中添加三点按钮

打开对应页面的布局文件(如activity_main.xml),添加触发菜单的按钮:

<ImageButton
    android:id="@+id/btn_vertical_menu"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/ic_baseline_more_vert_24"
    android:background="@null"
    android:contentDescription="更多菜单"/>

注:ic_baseline_more_vert_24是Android自带的垂直三点图标,可通过右键res/drawable → New → Vector Asset选择添加。

3. 实现菜单弹出与跳转逻辑

在Activity中实现:

import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.View
import android.widget.ImageButton
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.PopupMenu

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val menuBtn = findViewById<ImageButton>(R.id.btn_vertical_menu)
        menuBtn.setOnClickListener { view ->
            showVerticalMenu(view)
        }
    }

    private fun showVerticalMenu(view: View) {
        val popupMenu = PopupMenu(this, view)
        popupMenu.menuInflater.inflate(R.menu.menu_vertical_dot, popupMenu.menu)
        
        popupMenu.setOnMenuItemClickListener { menuItem ->
            when (menuItem.itemId) {
                R.id.menu_item_website1 -> openWebsite("https://www.example.com")
                R.id.menu_item_website2 -> openWebsite("https://docs.example.com")
                R.id.menu_item_website3 -> openWebsite("https://feedback.example.com")
            }
            true
        }
        
        popupMenu.show()
    }

    private fun openWebsite(url: String) {
        val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
        if (intent.resolveActivity(packageManager) != null) {
            startActivity(intent)
        }
    }
}

在Fragment中实现:

import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageButton
import androidx.appcompat.widget.PopupMenu
import androidx.fragment.app.Fragment

class HomeFragment : Fragment() {
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val view = inflater.inflate(R.layout.fragment_home, container, false)
        val menuBtn = view.findViewById<ImageButton>(R.id.btn_vertical_menu)
        menuBtn.setOnClickListener { showVerticalMenu(it) }
        return view
    }

    private fun showVerticalMenu(view: View) {
        val popupMenu = PopupMenu(requireContext(), view)
        popupMenu.menuInflater.inflate(R.menu.menu_vertical_dot, popupMenu.menu)
        
        popupMenu.setOnMenuItemClickListener { menuItem ->
            when (menuItem.itemId) {
                R.id.menu_item_website1 -> openWebsite("https://www.example.com")
                R.id.menu_item_website2 -> openWebsite("https://docs.example.com")
                R.id.menu_item_website3 -> openWebsite("https://feedback.example.com")
            }
            true
        }
        
        popupMenu.show()
    }

    private fun openWebsite(url: String) {
        val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
        if (intent.resolveActivity(requireContext().packageManager) != null) {
            startActivity(intent)
        }
    }
}

4. 关键注意事项

  • 跳转的URL必须以http://或https://开头,否则系统无法识别为网页地址。
  • 添加resolveActivity判断是为了避免设备无可用浏览器时崩溃。

内容的提问来源于stack exchange,提问作者Marfog509

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 12:38:35