簡體   English   中英

在HTML按鈕上打開導航抽屜,單擊

[英]Open Navigation Drawer on HTML button click

我有一個打開導航抽屜的常規代碼。 我想在WebView單擊HTML按鈕時打開相同的導航抽屜。 我可以使用WebAppInterface在HTML按鈕上單擊Toast或任何其他簡單功能。 但是在這種情況下如何打開抽屜?

HTML代碼:

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
    function showAndroidDialog() {
        Luke.showDialog();
    }
</script>

</head>

<body>

<h1>My Web Page</h1>

<p id="demo">Second Page</p>

<button type="button"  onClick="showAndroidDialog()">OK</button>


</body>
</html>

RiverFragment.java

public class RiverFragment extends Fragment{


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        // Retrieving the currently selected item number
        int position = getArguments().getInt("position");

        // List of rivers
        String[] rivers = getResources().getStringArray(R.array.rivers);

        // Creating view correspoding to the fragment
        View v = inflater.inflate(R.layout.fragment_layout, container, false);

        // Getting reference to the TextView of the Fragment
        TextView tv = (TextView) v.findViewById(R.id.tv_content);

        // Setting currently selected river name in the TextView
        tv.setText(rivers[position]);       

        // Updating the action bar title
        getActivity().getActionBar().setTitle(rivers[position]);

        return v;
    }
}

MainActivity.java

public class MainActivity extends Activity {

    // Within which the entire activity is enclosed
    DrawerLayout mDrawerLayout;

    // ListView represents Navigation Drawer
    ListView mDrawerList;

    // ActionBarDrawerToggle indicates the presence of Navigation Drawer in the action bar
    ActionBarDrawerToggle mDrawerToggle;    

    // Title of the action bar
    String mTitle="";

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        mTitle = (String) getTitle();       


        // Getting reference to the DrawerLayout
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);


        mDrawerList = (ListView) findViewById(R.id.drawer_list);

        // Getting reference to the ActionBarDrawerToggle
        mDrawerToggle = new ActionBarDrawerToggle(  this, 
                                                    mDrawerLayout, 
                                                    R.drawable.ic_drawer, 
                                                    R.string.drawer_open,
                                                    R.string.drawer_close){

            /** Called when drawer is closed */
            public void onDrawerClosed(View view) {
                getActionBar().setTitle(mTitle);
                invalidateOptionsMenu();

            }

            /** Called when a drawer is opened */
            public void onDrawerOpened(View drawerView) {
                getActionBar().setTitle("Select a river");
                invalidateOptionsMenu();
            }

        };

        // Setting DrawerToggle on DrawerLayout
        mDrawerLayout.setDrawerListener(mDrawerToggle);

        // Creating an ArrayAdapter to add items to the listview mDrawerList
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                    getBaseContext(), 
                    R.layout.drawer_list_item  , 
                    getResources().getStringArray(R.array.rivers) 
                );

        // Setting the adapter on mDrawerList
        mDrawerList.setAdapter(adapter);

        // Enabling Home button
        getActionBar().setHomeButtonEnabled(true);

        // Enabling Up navigation
        getActionBar().setDisplayHomeAsUpEnabled(true);

        // Setting item click listener for the listview mDrawerList
        mDrawerList.setOnItemClickListener(new OnItemClickListener() {


            @Override
            public void onItemClick(AdapterView<?> parent,
                            View view,
                            int position,
                            long id) {          

                // Getting an array of rivers
                String[] rivers = getResources().getStringArray(R.array.rivers);

                //Currently selected river
                mTitle = rivers[position];              


                // Creating a fragment object
                RiverFragment rFragment = new RiverFragment();

                // Creating a Bundle object
                Bundle data = new Bundle();

                // Setting the index of the currently selected item of mDrawerList
                data.putInt("position", position);

                // Setting the position to the fragment
                rFragment.setArguments(data);

                // Getting reference to the FragmentManager
                FragmentManager fragmentManager  = getFragmentManager();

                // Creating a fragment transaction
                FragmentTransaction ft = fragmentManager.beginTransaction();

                // Adding a fragment to the fragment transaction
                ft.replace(R.id.content_frame, rFragment);

                // Committing the transaction
                ft.commit();

                // Closing the drawer
                mDrawerLayout.closeDrawer(mDrawerList);             

            }
        }); 
    }


     @Override
     protected void onPostCreate(Bundle savedInstanceState) {
         super.onPostCreate(savedInstanceState);         
         mDrawerToggle.syncState(); 
     }

    /** Handling the touch event of app icon */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {     
        if (mDrawerToggle.onOptionsItemSelected(item)) {
          return true;
        }
        return super.onOptionsItemSelected(item);
    }


    /** Called whenever we call invalidateOptionsMenu() */
    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        // If the drawer is open, hide action items related to the content view
        boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);

        menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
        return super.onPrepareOptionsMenu(menu);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

看看這個 我猜想使用一個onTouchListener()和一個View ID來攔截對WebView上特定按鈕的調用,您可以做一個drawerLayout.openDrawer()

您可以通過界面本身實現相同的功能

JavaScriptInterface jsInterface = new JavaScriptInterface();
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(jsInterface, "Android");

接口類將是:

public class JavaScriptInterface {

    public void openDrawer(){
        yourdrawerlayout.open(Gravity.LEFT);
    }
}

您需要從html調用此openDrawer方法,如下所示

document.getElementById("button").addEventListener("click", function() {
    Android.openDrawer();
});

您已經在HTML代碼中的Button click上定義了showAndroidDialog()方法。

Luke.showDialog(); 與android view組件進行交互。

因此,您必須在JavascriptInterface調用showDialog()方法以逐步打開抽屜

您可以像這樣添加JavascriptInterface

myWebView.addJavascriptInterface(new WebAppInterface(this), "Luke");

您的WebAppInterface應該是這樣的:

 public class WebAppInterface {
        Context mContext;

        /** Instantiate the interface and set the context */
        WebAppInterface(Context c) {
            mContext = c;
        }

        @JavascriptInterface   // must be added for API 17 or higher
        public void showDialog() {
         mDrawerLayout.openDrawer(Gravity.LEFT); // open navigation drawer
        }
 }

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM