Back

【Lesson 8 】安卓中的ViewGroup 与 View ,以及 加上简单的activity , 动态创建view组件

发布时间: 2016-01-06 02:27:00

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);

Back