iPhone Like Toolbar for Android
来源:互联网 发布:质量管理矩阵图模版 编辑:程序博客网 时间:2024/05/17 20:28
Recently my company has been getting a few projects where people ask us to build Android versions of their iPhone applications. As a result of these projects I needed to create a simple iPhone like Toolbar component for Android. I extended the original component so that it could also double as a more flexible Tab component. Here are the results.
Layout for default activity - main.xml
Note the last component. This points to the class below. I also use a custom attribute to indicate which tab is currently selected.
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res/com.paxmodept.demo" android:orientation="vertical" android:background="@android:color/white" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/hello" android:gravity="center"/> <com.paxmodept.demo.Toolbar android:layout_width="fill_parent" android:layout_height="70dip" app:textViewId="option1"/> </LinearLayout>
Class - Toolbar.java
This is the class that controls the component. These custom components are a nice way to re-use code efficiently. Note how I inflate the navigation layout file.
public class Toolbar extends LinearLayout { public Toolbar(final Context context) { super(context); } public Toolbar(final Context con, AttributeSet attrs) { super(con,attrs); setOrientation(HORIZONTAL); setBackgroundColor(getResources(). getColor(android.R.color.transparent)); LayoutInflater inflater = (LayoutInflater) con.getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater.inflate(R.layout.navigation, this); TypedArray a = con.obtainStyledAttributes(attrs, R.styleable.Toolbar); String option = a.getString(R.styleable.Toolbar_textViewId); String resourceId = "com.paxmodept.demo:id/"+option; int optionId = getResources().getIdentifier(resourceId,null,null); TextView currentOption = (TextView) findViewById(optionId); currentOption.setBackgroundColor(getResources(). getColor(android.R.color.white)); currentOption.setTextColor(getResources(). getColor(android.R.color.black)); currentOption.requestFocus(optionId); currentOption.setFocusable(false); currentOption.setClickable(false); TextView option1 = (TextView) findViewById(R.id.option1); option1.setOnClickListener(new OnClickListener() { public void onClick(View v) { CharSequence txt = "Hello!"; int len = Toast.LENGTH_SHORT; Toast toast = Toast.makeText(con, txt, len); toast.show(); } }); }}
Include File - navigation.xml
This creates the navgation bar. It uses compound drawables in aTextView component to minimise the number of components needed. Note that the background and textColor attributes of each TextView component are ColourStateLists. This gives you a great deal of flexibility in terms of creating a custom look and feel.
<merge xmlns:android="http://schemas.android.com/apk/res/android"> <TextView android:id="@+id/option1" android:layout_height="70dip" android:layout_width="80dip" android:text="Title 1" android:textSize="10dip" android:textStyle="bold" android:textColor="@drawable/text_states" android:clickable="true" android:focusable="true" android:background="@drawable/backgound_states" android:drawableTop="@android:drawable/ic_menu_edit" android:gravity="center" android:layout_weight="1"/> <TextView android:id="@+id/option2" android:layout_height="70dip" android:layout_width="80dip" android:text="Title 2" android:textSize="10dip" android:textStyle="bold" android:textColor="@drawable/text_states" android:clickable="true" android:focusable="true" android:background="@drawable/backgound_states" android:drawableTop="@android:drawable/ic_menu_zoom" android:gravity="center" android:layout_weight="1"/> <TextView android:id="@+id/option3" android:layout_height="70dip" android:layout_width="80dip" android:text="Title 3" android:textSize="10dip" android:textStyle="bold" android:textColor="@drawable/text_states" android:clickable="true" android:focusable="true" android:background="@drawable/backgound_states" android:drawableTop="@android:drawable/ic_menu_add" android:gravity="center" android:layout_weight="1"/> <TextView android:id="@+id/option4" android:layout_height="70dip" android:layout_width="80dip" android:text="Title 4" android:textSize="10dip" android:textStyle="bold" android:textColor="@drawable/text_states" android:clickable="true" android:focusable="true" android:background="@drawable/backgound_states" android:drawableTop="@android:drawable/ic_menu_help" android:gravity="center" android:layout_weight="1"/> </merge>
I am sure there are alternate ways of creating the navigation bar but this strategy worked for me.
Source code updated 11/08/2010 Please note that the source code is now more comprehensive but is slightly different from the tutorial displayed above.
Download the source code for the entire project.
- iPhone Like Toolbar for Android
- iPhone Tabs for Android!
- Build x86 Android for PC like EeePC
- Simple Logging for Android & iPhone
- 图片toolbar iphone
- 269. Like for like. 一报还一报
- Nike Is Rereleasing Sneakers That Look Like iPhone Cases For Your FeetNike Air Max 2009
- Android Toolbar
- android ToolBar
- android toolbar
- Android Toolbar
- Android ToolBar
- Android Toolbar
- android toolbar
- Android ToolBar
- Android Toolbar
- ANDROID Toolbar
- Android Toolbar
- 裸设备与文件系统IO性能比较
- (2011.10.19)2_a4.cpp -- 删除单链表中的连续一段的内容
- tips
- 设置产生的归档日志保存位置
- .net WinForm下从datagridview中取值,通过Zedgraph作折线图
- iPhone Like Toolbar for Android
- 在MFC中从一个线程工作函数中向窗口发送消息(this指针的妙用)
- 上传进度支持(Upload progress in sessions)
- win7+ oracle +php环境的搭建
- jsp使用cookie实现记住密码的功能
- PRD文档的编写
- Oracle临时表游标未释放导致回滚段空间不足的解决方案
- RFID—MFRC522 win32驱动
- 如何处理高并发情况下的DB插入