废话
今天我们来编写发动态界面
朋友圈功能是一项不错的主意,还记得当年QQ刚火的时候,QQ推出了QQ空间,那时候各种非主流说说在QQ空间随处可见,发动态成了年轻人的一种潮流,无论生活中发生了什么都可以往上面传,直到微信的出现,让发动态成为全民的潮流,以前是年轻人,现在不管是大人还是小孩都可以在上面发各种东西,所以,我们的聊天软件也需要朋友圈的功能,下面我们来看看如何编写
activity_add_post.xml
<?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-auto"
android:id="@+id/add_post_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/add_post_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<EditText
android:id="@+id/add_post_edit"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="left|top"
android:background="@null"
android:focusable="true"
android:focusableInTouchMode="true"/>
</android.support.v4.widget.NestedScrollView>
</LinearLayout>
可以看到,我们的朋友圈界面比较简单,顶上标题栏,下方一个Edittext占据了余下的所有空间,那可能有的人就会问“发布按钮在哪?”,发布按钮我打算放在标题栏上,这样,编辑区就会显得简洁
AddPostActivity.java
package com.yk.mchat.app.activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import com.yk.mchat.R;
import com.yk.mchat.model.contacts.User;
import com.yk.mchat.model.post.Post;
import cn.bmob.v3.BmobUser;
import cn.bmob.v3.exception.BmobException;
import cn.bmob.v3.listener.SaveListener;
public class AddPostActivity extends AppCompatActivity {
private View mView;
private Toolbar mToolbar;
private EditText mEditText;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_post);
fbv();
init();
event();
}
/**
* 获取控件
*/
private void fbv() {
mView = findViewById(R.id.add_post_view);
mToolbar = findViewById(R.id.add_post_toolbar);
mEditText = findViewById(R.id.add_post_edit);
}
/**
* 初始化
*/
private void init() {
mToolbar.setTitle("编辑动态");
setSupportActionBar(mToolbar);
ActionBar actionBar=getSupportActionBar();
if(actionBar!=null){
actionBar.setDisplayHomeAsUpEnabled(true);
}
}
/**
* 绑定事件
*/
private void event() {
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_add_post_toolbar, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
break;
case R.id.menu_add_post_publish:
publish();
break;
default:
break;
}
return true;
}
/**
* 发表动态
*/
private void publish(){
String content=mEditText.getText().toString();
if(!TextUtils.isEmpty(content)){
User user= BmobUser.getCurrentUser(User.class);
Post post=new Post();
post.setContent(content);
post.setUser(user);
post.save(new SaveListener<String>() {
@Override
public void done(String s, BmobException e) {
if(e==null){
Snackbar.make(mView,"发表成功",Snackbar.LENGTH_LONG)
.setAction("返回", new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
})
.show();
}else{
Snackbar.make(mView,"发表失败",Snackbar.LENGTH_LONG)
.setAction("重试", new View.OnClickListener() {
@Override
public void onClick(View view) {
publish();
}
})
.show();
}
}
});
}else{
Snackbar.make(mView,"发表内容不能为空",Snackbar.LENGTH_LONG).show();
}
}
}
我们的Activity也比较简单,主要来看看发布按钮的点击事件
/**
* 发表动态
*/
private void publish(){
String content=mEditText.getText().toString();
if(!TextUtils.isEmpty(content)){
User user= BmobUser.getCurrentUser(User.class);
Post post=new Post();
post.setContent(content);
post.setUser(user);
post.save(new SaveListener<String>() {
@Override
public void done(String s, BmobException e) {
if(e==null){
Snackbar.make(mView,"发表成功",Snackbar.LENGTH_LONG)
.setAction("返回", new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
})
.show();
}else{
Snackbar.make(mView,"发表失败",Snackbar.LENGTH_LONG)
.setAction("重试", new View.OnClickListener() {
@Override
public void onClick(View view) {
publish();
}
})
.show();
}
}
});
}else{
Snackbar.make(mView,"发表内容不能为空",Snackbar.LENGTH_LONG).show();
}
}
可以看到,我们的发布按钮是通过上传到Bmob的后端数据库实现的,具体的实现代码里都写得比较详细
今天就到这里。