Android开发中的小细节

Android的ListView的使用

可能我们在手机APP上使用的最多的视图就是列表了,那么Android列表(ListView)该怎么使用呢?

首先还是显示界面activity_main.xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.lpf.test.MainActivity">
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
android:background="@color/bg"
android:divider="@color/item_item"
android:dividerHeight="10dp"/>
</RelativeLayout>

之后是其对应的MainActivity.java文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class MainActivity extends AppCompatActivity{
private ListView listview;
//private ArrayAdapter<String>arr_adapter;
private SimpleAdapter simp_Adapter;
private List<Map<String,String>>datalist;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (ListView)findViewById(R.id.listview);
datalist = new ArrayList<Map<String,String>>();
simp_Adapter = new SimpleAdapter(this,getData(),R.layout.item,
new String[]{"title","text"},new int[]{R.id.title,R.id.text});
listview.setAdapter(simp_Adapter);
}
private List<Map<String,String>> getData(){
String[] data_text = getResources().getStringArray(R.array.text_arr);
String[] data_title = getResources().getStringArray(R.array.title_arr);
for(int i=0;i<data_text.length;i++){
Map<String,String>map = new HashMap<String,String>();
map.put("title",data_title[i]);
map.put("text",data_text[i]);
datalist.add(map);
}
return datalist;
}
}

其他文件保持不变即可。 至此,一个Android列表程序就实现了。

Android实现输入框回车输入

用惯了iOS的各位在开发安卓程序或者使用安卓手机时,都会遇到这样一个问题:原本在iOS上都是回车输入,而到了Android上却需要点击按钮完成输入(对比两个系统上的QQ就发现了)。我一直在使用iOS系统,因为《软设》才着手Android开发,所以我就想能不能像iOS上的那样实现一个输入框+回车符完成输入呢?经过我查找资料,发现确实可以:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="1">
<EditText
android:id="@+id/edit_message"
android:layout_margin="30dp"
android:layout_width="match_parent"
android:layout_height="80dp"
android:hint="请输入文本信息 ..."
android:imeOptions="actionSearch"
android:singleLine="true"/>
</LinearLayout>

在EditText中加入了imeOptions就可以将回车符转变成各种各样的功能:

  • actionDone——回车符–>完成
  • actionSend——回车符–>发送
  • actionGo——回车符–>前进
  • actionNext——回车符–>下一项
  • actionNone——回车符–>无动作
  • actionPrevious——回车符–>上一项
  • actionSearch——回车符–>搜索
  • actionUnspecified——回车符–>未指定
  • actionSend——回车符–>发送

又查阅资料发现:ime是Input Method Editors的缩写,也就是输入法编辑器,原来如此,不过想使用这个属性,必须加上android:inputType 或者 android:singleline="true" 至此,就完成了Android回车符向iOS的转化!

Android页面跳转

前情提要

开发安卓单页面程序久了,必然会思考怎么开发像现在一般Android应用程序那样的多页面(指页面有跳转)程序,我也是在搜索了别人的博客之后,才总结出如下的这点精华步骤!

编写AndroidManifest.xml

首先,我们要确定我们需要怎样的跳转,既然跳转,无非就是自动跳转或者点击按钮,无论哪种,首先我们必须有两个界面(至少),所以在AndroidManifest.xml中,我们需要这样写:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="uno.meng.download">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ResultActivity"
android:label="@string/comeback"
android:parentActivityName=".MainActivity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity"/>
</activity>
</application>
</manifest>

其中,每个对应一个界面,从代码中可见,我将后一个页面加了一个返回前一个页面的“返回符”。

编写跳转前界面search.xml

由于我在此将介绍怎么使用按钮跳转(带输入),所以直接在主界面search.xml(名称随意)中声明这两个组件(按钮,输入框):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="1">
<EditText
android:id="@+id/edit_message"
android:layout_margin="30dp"
android:layout_width="match_parent"
android:layout_height="80dp"
android:hint="请输入文本信息 ..."/>
<Button
android:id="@+id/button"
android:text="点击提交 "
android:layout_margin="100dp"
android:layout_width="127dp"
android:layout_height="wrap_content"
android:onClick="sendMessage" />
</LinearLayout>

我对按钮加了一个onClick事件。

编写对应的MainActivity.java

在search.xml对应的MainActivity.java文件中我们写好onCreate方法(每个文件都会有)以及sendMessage方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class MainActivity extends AppCompatActivity {
public final static String EXTRA_MESSAGE = "uno.meng.download.MESSAGE";
public void sendMessage(){
EditText editText = (EditText)findViewById(R.id.edit_message);
String message = editText.getText().toString();
Intent intent = new Intent(this, ResultActivity.class);
intent.putExtra(EXTRA_MESSAGE,message);
startActivity(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.search);
}
}

编写接收界面result.xml

然后到result.xml接收(我用的一个框来接收):

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="1">
<TextView
android:layout_margin="30dp"
android:layout_width="match_parent"
android:layout_height="80dp"/>
</LinearLayout>

编写接收对应的ResultActivity.java

编写对应的ResultActivity.java文件, 将从MainActivity.java接收来的文字打印到result.xml的框中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class ResultActivity extends AppCompatActivity{
private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.result);
intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
System.out.println(message);
TextView textview = new TextView(this);
textview.setTextSize(100);
textview.setText(message);
setContentView(textview);
}
}

到此为止,已经完成了Android页面跳转!

Android 自定义toolBar上的 action item

自定义的view,action_view_auto_like.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<ImageButton
android:id="@+id/action_auto_like_button"
android:layout_width="70dp"
android:layout_height="30dp"
android:scaleType="centerInside"
android:background="@android:color/transparent"
android:src="@drawable/btn_nav_autoliker">

</ImageButton>
</FrameLayout>

自定义的menu,menu_tinder_liker.xml

1
2
3
4
5
6
7
8
9
10
11
12
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tinder="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_auto"
android:actionLayout="@layout/action_view_auto_like"
android:icon="@drawable/btn_nav_autoliker"
android:orderInCategory="1"
android:title="@string/action_auto_like"
tinder:actionLayout="@layout/action_view_auto_like"
tinder:showAsAction="always"/>

</menu>

在fragment 中配置

现在onCreateView中加上setHasOptionsMenu(true);,让系统在fragment中初始化menu。

1
2
3
4
5
6
7
8
9
10
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_tinder_like, menu);
MenuItem searchItem = menu.findItem(R.id.action_auto);
FrameLayout layout = (FrameLayout) MenuItemCompat
.getActionView(searchItem);
layout.findViewById(R.id.action_auto_like_button)
.setOnClickListener(this);
super.onCreateOptionsMenu(menu, inflater);
}

然后在onClick中加入你的逻辑。



The link of this page is http://home.meng.uno/articles/5d6c9819/ . Welcome to reproduce it!

© 2018.02.08 - 2021.01.07 Mengmeng Kuang  保留所有权利!

UV : | PV :

:D 获取中...

Creative Commons License