【Lesson 8 】安卓中的ViewGroup 与 View ,以及 加上简单的activity , 动态创建view组件
访问量: 2842
refer to: http://developer.android.com/training/basics/firstapp/building-ui.html
android中,布局是由 view + view group搭建起来的。
view: button, label 等
view group: 包含多个view, 也可以包含其他的 view group
view group 也就是layout , LinearLayout 等
建立 LinearLayout
res/layout/my_test_layout.xml 这个,就是个layout: (注意里面的RelativeLayout)
<RelativeLayout...> <TextView android:id="@+id/edit_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="@string/edit_message"> </TextView> <Button
android:layout_width='wrap_content'
android:layout_height='wrap_content'
android:text='@string/save'
>
</Button> </RelativeLayout>
然后,其中的TextView, 就是一个普通的View, 里面的完整属性是:
android:id: @ 表示需要在外部引用(getElementById), + 表示这个元素是新增加的, id 表示根据啥来获取元素。 edit_message 是这个 resource的名字。
android:layout_width/height 表示 这个元素的宽和高
android:hint 文字提示。 这里的 @string/edit_message 表示,你要有个string 定义成为 edit_message
在 res/values/strings.xml 中定义用到的各种 @string,
<resources> <string name='edit_message'>我是edit message</string> </resources>
res/values中的命名规则
strings.xml : 包含了所有的string
values.xml 包含了所有的value
color啥的都是一样。
为上面的button增加一个activity
1. 在XML中,增加:android:onClick="save", 如:
<Button android:onClick='save'.. >
2. 在对应的activity 中,增加:
+import android.content.Intent; +import android.widget.EditText; + public void save(View view){ + Intent intent = new Intent(this, DisplayMessageActivity.class); + EditText edit_text = (EditText)findViewById(R.id.edit_message); + String message = edit_text.getText().toString(); + intent.putExtra("extra", message); + startActivity(intent); + }
3. 新增一个activity (包括: 增加activity, res/layout, res/value/strings, 还的在 AndroidManifest.xml 中注册activity )
(我仿佛回到了十年前做SSH 的时候,一个很简单的功能,都要被java代码淹死,各种费代码。)
package me.siwei.com.test_android; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import android.view.Menu; import android.view.MenuItem; import android.content.Intent; import android.widget.EditText; public class DisplayMessageActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_display_message); if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(R.id.container, new PlaceholderFragment()).commit(); } } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle app bar item clicks here. The app bar // automatically handles clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } public static class PlaceholderFragment extends Fragment { public PlaceholderFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_display_message, container, false); return rootView; } } }
然后,在 AndroidManifest.xml中,还要注册这个activity. 其中的 android:parentActivityName 定义了安卓返回键的显示的页面。
<activity
android:name=".DisplayMessageActivity"
android:parentActivityName=".MainActivity"
android:label="@string/dispaly_message_acitvity_title"
android:theme="@style/AppTheme.NoActionBar">
</activity>
下面的代码,可以动态的创建view 组件:
String message = "你好,我是message"; TextView text_view2 = new TextView(this); text_view2.setText(message); text_view2.setTextSize(40); LinearLayout layout = (LinearLayout) findViewById(R.id.layout_two); layout.addView(text_view2);