一、自定义MenuItem的视图
custom_view.xml (就是一个单选按钮)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="fill_parent" android:gravity="left|center_vertical" android:orientation="horizontal" > <RadioGroup android:id="@+id/radio_nav" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" > <RadioButton android:text="Custom" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#ffffff" /> <RadioButton android:text="View!" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#ffffff" /> </RadioGroup> </LinearLayout>
MainActivity.java
//Inflate the custom view View customNav = LayoutInflater.from(this).inflate(R.layout.custom_view, null); //Bind to its state change ((RadioGroup)customNav.findViewById(R.id.radio_nav)).setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { Toast.makeText(MainActivity.this, "Navigation selection changed.", Toast.LENGTH_SHORT).show(); } }); //Attach to the action bar getSupportActionBar().setCustomView(customNav); getSupportActionBar().setDisplayShowCustomEnabled(true);
二、添加圆形模糊进度的进度条
package com.kale.actionbar02; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.Window; import android.widget.RadioGroup; import android.widget.RadioGroup.OnCheckedChangeListener; import android.widget.Toast; public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); setContentView(R.layout.activity_main); //设置actionbar上面显示进度条,true表示显示,如果是false表示不显示 setSupportProgressBarIndeterminateVisibility(true);//Attach to the action bar getSupportActionBar().setCustomView(customNav); getSupportActionBar().setDisplayShowCustomEnabled(true); } }
三、添加有进度的横向进度条
package com.kale.actionbar02; import android.os.Bundle; import android.os.Handler; import android.support.v7.app.ActionBarActivity; import android.view.View; import android.view.Window; public class MainActivity extends ActionBarActivity { private int mProgress = 100; Handler mHandler = new Handler(); Runnable mProgressRunner = new Runnable() { @Override public void run() { mProgress += 2; // Normalize our progress along the progress bar's scale int progress = (Window.PROGRESS_END - Window.PROGRESS_START) / 100* mProgress; setSupportProgress(progress); if (mProgress < 100) { mHandler.postDelayed(mProgressRunner, 50); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); supportRequestWindowFeature(Window.FEATURE_PROGRESS); setContentView(R.layout.activity_main); // 设置actionbar上面显示进度条,true表示显示,如果是false表示不显示 //setSupportProgressBarVisibility(true);//设置初始状态是否显示进度条,一般我们不显示。在用的时候再显示它 findViewById(R.id.button_id).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View arg0) { if (mProgress == 100) { mProgress = 0; mProgressRunner.run(); } } }); } }
四、添加下拉导航+悬浮模式
给ActionBar添加下拉导航的方法都是添加一个适配器,可以使简单的ArrayAdapter,也可以使SpinnerAdapter,添加完数据后再绑定个监听器。其实和Spinner没啥太大的区别。悬浮模式是可以让布局文件从ActionBar底下通过,可以实现透明效果。其代码就一行:
// 设置ActionBar为悬浮的,就是说悬浮在布局文件上 supportRequestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
注意看一下布局的,上边距。是用的ActionBar的高度来指定的
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingLeft="10dp" android:paddingRight="10dp" android:paddingTop="?actionBarSize" android:orientation="vertical"> <TextView android:id="@+id/bunch_of_text" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> </ScrollView> </FrameLayout>
下面是下拉导航的代码:
package com.kale.actionbar02; import android.content.Context; import android.os.Bundle; import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBar.OnNavigationListener; import android.support.v7.app.ActionBarActivity; import android.view.Window; import android.widget.ArrayAdapter; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 设置ActionBar为悬浮的,就是说悬浮在布局文件上 supportRequestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY); setContentView(R.layout.activity_main); // 将ActionBar的操作模型设置为NAVIGATION_MODE_LIST getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); getSupportActionBar().setTitle(null); Context context = getSupportActionBar().getThemedContext(); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( context, R.array.locations, android.R.layout.simple_spinner_dropdown_item); getSupportActionBar().setListNavigationCallbacks(adapter, new DropDownListenser()); // Load partially transparent black background getSupportActionBar().setBackgroundDrawable( getResources().getDrawable(R.drawable.bar_color)); TextView bunchOfText = (TextView) findViewById(R.id.bunch_of_text); bunchOfText.setText(builder.toString()); } /** * 实现 ActionBar.OnNavigationListener接口 */ class DropDownListenser implements OnNavigationListener { // 得到和Adapter里一致的字符数组 String[] listNames = getResources().getStringArray(R.array.locations); @Override public boolean onNavigationItemSelected(int itemPosition, long itemId) { Toast.makeText(getApplicationContext(), listNames[itemPosition], 0) .show(); return false; } } }
values/array.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="locations"> <item>Home</item> <item>Email</item> <item>Calendar</item> <item>Browser</item> <item>Clock</item> </string-array> </resources>
全部的代码:
package com.kale.actionbar02; import android.content.Context; import android.os.Bundle; import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBar.OnNavigationListener; import android.support.v7.app.ActionBarActivity; import android.view.Window; import android.widget.ArrayAdapter; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 设置ActionBar为悬浮的,就是说悬浮在布局文件上 supportRequestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY); setContentView(R.layout.activity_main); // 将ActionBar的操作模型设置为NAVIGATION_MODE_LIST getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); getSupportActionBar().setTitle(null); Context context = getSupportActionBar().getThemedContext(); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( context, R.array.locations, android.R.layout.simple_spinner_dropdown_item); getSupportActionBar().setListNavigationCallbacks(adapter, new DropDownListenser()); // Load partially transparent black background getSupportActionBar().setBackgroundDrawable( getResources().getDrawable(R.drawable.bar_color)); StringBuilder builder = new StringBuilder(); for (int i = 0; i < 3; i++) { for (String dialog : DIALOGUE) { builder.append(dialog).append(" "); } } TextView bunchOfText = (TextView) findViewById(R.id.bunch_of_text); bunchOfText.setText(builder.toString()); } /** * 实现 ActionBar.OnNavigationListener接口 */ class DropDownListenser implements OnNavigationListener { // 得到和Adapter里一致的字符数组 String[] listNames = getResources().getStringArray(R.array.locations); @Override public boolean onNavigationItemSelected(int itemPosition, long itemId) { Toast.makeText(getApplicationContext(), listNames[itemPosition], 0) .show(); return false; } } public static final String[] DIALOGUE = new String[] { "So shaken as we are, so wan with care," + "Find we a time for frighted peace to pant," + "And breathe short-winded accents of new broils" + "To be commenced in strands afar remote." + "No more the thirsty entrance of this soil" + "Shall daub her lips with her own children's blood;" + "Nor more shall trenching war channel her fields," + "Nor bruise her flowerets with the armed hoofs" + "Of hostile paces: those opposed eyes," + "Which, like the meteors of a troubled heaven," + "All of one nature, of one substance bred," + "Did lately meet in the intestine shock" + "And furious close of civil butchery" + "Shall now, in mutual well-beseeming ranks," + "March all one way and be no more opposed" + "Against acquaintance, kindred and allies:" + "The edge of war, like an ill-sheathed knife," + "No more shall cut his master. Therefore, friends," + "As far as to the sepulchre of Christ," + "Whose soldier now, under whose blessed cross" + "We are impressed and engaged to fight," + "Forthwith a power of English shall we levy;" + "Whose arms were moulded in their mothers' womb" + "To chase these pagans in those holy fields" + "Over whose acres walk'd those blessed feet" + "Which fourteen hundred years ago were nail'd" + "For our advantage on the bitter cross." + "But this our purpose now is twelve month old," + "And bootless 'tis to tell you we will go:" + "Therefore we meet not now. Then let me hear" + "Of you, my gentle cousin Westmoreland," + "What yesternight our council did decree" + "In forwarding this dear expedience.", "Hear him but reason in divinity," + "And all-admiring with an inward wish" + "You would desire the king were made a prelate:" + "Hear him debate of commonwealth affairs," + "You would say it hath been all in all his study:" + "List his discourse of war, and you shall hear" + "A fearful battle render'd you in music:" + "Turn him to any cause of policy," + "The Gordian knot of it he will unloose," + "Familiar as his garter: that, when he speaks," + "The air, a charter'd libertine, is still," + "And the mute wonder lurketh in men's ears," + "To steal his sweet and honey'd sentences;" + "So that the art and practic part of life" + "Must be the mistress to this theoric:" + "Which is a wonder how his grace should glean it," + "Since his addiction was to courses vain," + "His companies unletter'd, rude and shallow," + "His hours fill'd up with riots, banquets, sports," + "And never noted in him any study," + "Any retirement, any sequestration" + "From open haunts and popularity.", "I come no more to make you laugh: things now," + "That bear a weighty and a serious brow," + "Sad, high, and working, full of state and woe," + "Such noble scenes as draw the eye to flow," + "We now present. Those that can pity, here" + "May, if they think it well, let fall a tear;" + "The subject will deserve it. Such as give" + "Their money out of hope they may believe," + "May here find truth too. Those that come to see" + "Only a show or two, and so agree" + "The play may pass, if they be still and willing," + "I'll undertake may see away their shilling" + "Richly in two short hours. Only they" + "That come to hear a merry bawdy play," + "A noise of targets, or to see a fellow" + "In a long motley coat guarded with yellow," + "Will be deceived; for, gentle hearers, know," + "To rank our chosen truth with such a show" + "As fool and fight is, beside forfeiting" + "Our own brains, and the opinion that we bring," + "To make that only true we now intend," + "Will leave us never an understanding friend." + "Therefore, for goodness' sake, and as you are known" + "The first and happiest hearers of the town," + "Be sad, as we would make ye: think ye see" + "The very persons of our noble story" + "As they were living; think you see them great," + "And follow'd with the general throng and sweat" + "Of thousand friends; then in a moment, see" + "How soon this mightiness meets misery:" + "And, if you can be merry then, I'll say" + "A man may weep upon his wedding-day.", "First, heaven be the record to my speech!" + "In the devotion of a subject's love," + "Tendering the precious safety of my prince," + "And free from other misbegotten hate," + "Come I appellant to this princely presence." + "Now, Thomas Mowbray, do I turn to thee," + "And mark my greeting well; for what I speak" + "My body shall make good upon this earth," + "Or my divine soul answer it in heaven." + "Thou art a traitor and a miscreant," + "Too good to be so and too bad to live," + "Since the more fair and crystal is the sky," + "The uglier seem the clouds that in it fly." + "Once more, the more to aggravate the note," + "With a foul traitor's name stuff I thy throat;" + "And wish, so please my sovereign, ere I move," + "What my tongue speaks my right drawn sword may prove.", "Now is the winter of our discontent" + "Made glorious summer by this sun of York;" + "And all the clouds that lour'd upon our house" + "In the deep bosom of the ocean buried." + "Now are our brows bound with victorious wreaths;" + "Our bruised arms hung up for monuments;" + "Our stern alarums changed to merry meetings," + "Our dreadful marches to delightful measures." + "Grim-visaged war hath smooth'd his wrinkled front;" + "And now, instead of mounting barded steeds" + "To fright the souls of fearful adversaries," + "He capers nimbly in a lady's chamber" + "To the lascivious pleasing of a lute." + "But I, that am not shaped for sportive tricks," + "Nor made to court an amorous looking-glass;" + "I, that am rudely stamp'd, and want love's majesty" + "To strut before a wanton ambling nymph;" + "I, that am curtail'd of this fair proportion," + "Cheated of feature by dissembling nature," + "Deformed, unfinish'd, sent before my time" + "Into this breathing world, scarce half made up," + "And that so lamely and unfashionable" + "That dogs bark at me as I halt by them;" + "Why, I, in this weak piping time of peace," + "Have no delight to pass away the time," + "Unless to spy my shadow in the sun" + "And descant on mine own deformity:" + "And therefore, since I cannot prove a lover," + "To entertain these fair well-spoken days," + "I am determined to prove a villain" + "And hate the idle pleasures of these days." + "Plots have I laid, inductions dangerous," + "By drunken prophecies, libels and dreams," + "To set my brother Clarence and the king" + "In deadly hate the one against the other:" + "And if King Edward be as true and just" + "As I am subtle, false and treacherous," + "This day should Clarence closely be mew'd up," + "About a prophecy, which says that 'G'" + "Of Edward's heirs the murderer shall be." + "Dive, thoughts, down to my soul: here" + "Clarence comes.", "To bait fish withal: if it will feed nothing else," + "it will feed my revenge. He hath disgraced me, and" + "hindered me half a million; laughed at my losses," + "mocked at my gains, scorned my nation, thwarted my" + "bargains, cooled my friends, heated mine" + "enemies; and what's his reason? I am a Jew. Hath" + "not a Jew eyes? hath not a Jew hands, organs," + "dimensions, senses, affections, passions? fed with" + "the same food, hurt with the same weapons, subject" + "to the same diseases, healed by the same means," + "warmed and cooled by the same winter and summer, as" + "a Christian is? If you prick us, do we not bleed?" + "if you tickle us, do we not laugh? if you poison" + "us, do we not die? and if you wrong us, shall we not" + "revenge? If we are like you in the rest, we will" + "resemble you in that. If a Jew wrong a Christian," + "what is his humility? Revenge. If a Christian" + "wrong a Jew, what should his sufferance be by" + "Christian example? Why, revenge. The villany you" + "teach me, I will execute, and it shall go hard but I" + "will better the instruction.", "Virtue! a fig! 'tis in ourselves that we are thus" + "or thus. Our bodies are our gardens, to the which" + "our wills are gardeners: so that if we will plant" + "nettles, or sow lettuce, set hyssop and weed up" + "thyme, supply it with one gender of herbs, or" + "distract it with many, either to have it sterile" + "with idleness, or manured with industry, why, the" + "power and corrigible authority of this lies in our" + "wills. If the balance of our lives had not one" + "scale of reason to poise another of sensuality, the" + "blood and baseness of our natures would conduct us" + "to most preposterous conclusions: but we have" + "reason to cool our raging motions, our carnal" + "stings, our unbitted lusts, whereof I take this that" + "you call love to be a sect or scion.", "Blow, winds, and crack your cheeks! rage! blow!" + "You cataracts and hurricanoes, spout" + "Till you have drench'd our steeples, drown'd the cocks!" + "You sulphurous and thought-executing fires," + "Vaunt-couriers to oak-cleaving thunderbolts," + "Singe my white head! And thou, all-shaking thunder," + "Smite flat the thick rotundity o' the world!" + "Crack nature's moulds, an germens spill at once," + "That make ingrateful man!" }; }