【Lesson 8 】安卓中的ViewGroup 与 View ,以及 加上简单的activity , 动态创建view组件
访问量: 3207
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);