Commit c28708a4 by Author name

Merge branch 'page-zhangjinxiong' of D:\v0.1\beyond-clouds-android with conflicts.

parent 174b4943
package cn.yunliyunwai.beyondclouds.ui.page;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.graphics.fonts.Font;
import android.os.Build;
import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ImageSpan;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import com.google.android.material.tabs.TabLayout;
import com.luck.picture.lib.PictureSelector;
import com.luck.picture.lib.config.PictureConfig;
import com.luck.picture.lib.config.PictureMimeType;
import java.util.ArrayList;
import java.util.List;
import cn.yunliyunwai.beyondclouds.R;
import cn.yunliyunwai.beyondclouds.databinding.ActivityPublishQuestionBinding;
import cn.yunliyunwai.beyondclouds.ui.page.markdown.MarkdownButtonEnum;
public class PublishQuestionActivity extends AppCompatActivity {
private ActivityPublishQuestionBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityPublishQuestionBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
//创建fragment的集合
List<Fragment> list = new ArrayList<>();
list.add(new PictureFragment());
list.add(new EmojiFragment());
list.add(new FontFragment());
list.add(new OtherFragment());
list.add(new MoreFragment());
//所有头部图片的集合
List<Integer> tabImages = new ArrayList<>();
tabImages.add(R.drawable.photo_choose);
tabImages.add(R.drawable.emj_choose);
tabImages.add(R.drawable.font_choose);
tabImages.add(R.drawable.other_choose);
tabImages.add(R.drawable.more_choose);
binding.questionToolBar.setAdapter(new PublishQuestionViewPagerAdapter(getSupportFragmentManager(), this, list, tabImages));
binding.questionTabLayout.setupWithViewPager(binding.questionToolBar);
binding.questionToolBar.setCurrentItem(0);
binding.questionTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void onTabSelected(TabLayout.Tab tab) {
tab.setText(getImageSpanSelected(tabImages.get(tab.getPosition())));
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void onTabUnselected(TabLayout.Tab tab) {
tab.setText(getImageSpanUnSelected(tabImages.get(tab.getPosition())));
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private CharSequence getImageSpanSelected(int imageId) {
Drawable dImage = getResources().getDrawable(imageId);
dImage.setBounds(0, 0, dImage.getIntrinsicWidth()/2, dImage.getIntrinsicHeight()/2);
dImage.setTint(Color.parseColor("#00aae6"));
SpannableString sp = new SpannableString(" ");
ImageSpan imageSpan = new ImageSpan(dImage, ImageSpan.ALIGN_BOTTOM);
sp.setSpan(imageSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return sp;
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private CharSequence getImageSpanUnSelected(int imageId) {
Drawable dImage = getResources().getDrawable(imageId);
dImage.setBounds(0, 0, dImage.getIntrinsicWidth()/2, dImage.getIntrinsicHeight()/2);
dImage.setTint(Color.parseColor("#999999"));
SpannableString sp = new SpannableString(" ");
ImageSpan imageSpan = new ImageSpan(dImage, ImageSpan.ALIGN_BOTTOM);
sp.setSpan(imageSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return sp;
}
public void onClick(View view) {
String tag = (String) view.getTag();
switch (MarkdownButtonEnum.valueOf(tag)) {
case FONT_BOLD :
addMarkdownGrammar("****");
break;
case FONT_ITALIC:
addMarkdownGrammar("**");
break;
case FONT_UNDERLINE:
addMarkdownGrammar("++++");
break;
case FONT_SUPERSCRIPT:
addMarkdownGrammar("^^");
break;
case FONT_SUBSCRIPT:
addMarkdownGrammar("~~");
break;
case FONT_STRIKE_THROUGH:
addMarkdownGrammar("~~~~");
break;
case H1:
addMarkdownGrammar("# ");
break;
case H2:
addMarkdownGrammar("## ");
break;
case H3:
addMarkdownGrammar("### ");
break;
case H4:
addMarkdownGrammar("#### ");
break;
case H5:
addMarkdownGrammar("##### ");
break;
case H6:
addMarkdownGrammar("###### ");
break;
case UNORDERED_LIST:
addMarkdownGrammar("+ ");
break;
case CODE_BLOCK:
addMarkdownGrammar("```\n\n```");
break;
case CROSS_LINE:
addMarkdownGrammar("\n***\n");
break;
case TABLE:
addMarkdownGrammar(createTable());
break;
case ORDERED_LIST:
addMarkdownGrammar("\n1. \n2. \n3.");
default:
Log.d("msg", tag);
}
}
private void addMarkdownGrammar(String grammar) {
String rawData = binding.editTextQuestionContent.getText().toString();
StringBuilder data = new StringBuilder(rawData);
//将Markdown语法加入到data中并显示在页面上
data.append(grammar);
binding.editTextQuestionContent.setText(data.toString());
//使页面指针停于data末尾
binding.editTextQuestionContent.setSelection(binding.editTextQuestionContent.getText().toString().length());
}
//字符串拼接形成表格
private String createTable () {
//表格的列数
int line;
//表格的行数
int row;
EditText lineEditText = findViewById(R.id.edit_text_form_line);
if (lineEditText.getText().toString().equals("")) {
line = 3;
} else {
line = Integer.parseInt(lineEditText.getText().toString());
}
EditText rowEditText = findViewById(R.id.edit_text_form_row);
if (rowEditText.getText().toString().equals("")) {
row = 3;
} else {
row = Integer.parseInt(lineEditText.getText().toString());
}
//通过循环制表
StringBuilder table = new StringBuilder("\n"+"|");
for (int i = 0 ; i < row ; i++) {
for (int j = 0 ; j < line ; j++) {
if (i == 0) {
table.append("title|");
} else if (i == 1) {
table.append("-|");
} else {
table.append("content|");
}
}
if (i < row-1) {
table.append("\n"+"|");
}
}
return table.toString();
}
public void addCover(View view) {
PictureSelector. create(this)
.openGallery(PictureMimeType.ofImage())
.loadImageEngine(GlideEngine.createGlideEngine())
.forResult(PictureConfig.CHOOSE_REQUEST);
}
}
package cn.yunliyunwai.beyondclouds.ui.page.markdown;
public enum MarkdownButtonEnum {
/**
* 粗体
*/
FONT_BOLD,
/**
* 斜体
*/
FONT_ITALIC,
/**
* 下划线
*/
FONT_UNDERLINE,
/**
* 上角标
*/
FONT_SUPERSCRIPT,
/**
* 下角标
*/
FONT_SUBSCRIPT,
/**
* 中划线
*/
FONT_STRIKE_THROUGH,
/**
* h1
*/
H1,
/**
* h2
*/
H2,
/**
* h3
*/
H3,
/**
* h4
*/
H4,
/**
* h5
*/
H5,
/**
* h6
*/
H6,
/**
* 有序列表
*/
ORDERED_LIST,
/**
* 无序列表
*/
UNORDERED_LIST,
/**
* 代码块
*/
CODE_BLOCK,
/**
* 分割线
*/
CROSS_LINE,
/**
* 表格
*/
TABLE
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".ui.page.OtherFragment">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="250dp"
android:layout_height="40dp"
android:layout_marginStart="4dp"
android:layout_marginTop="20dp"
android:background="@drawable/markdown_button_area"
app:layout_constraintStart_toStartOf="@id/other_fragment_left_guide_line"
app:layout_constraintTop_toTopOf="parent">
<ImageButton
android:id="@+id/button_align_left"
android:layout_width="20dp"
android:layout_height="20dp"
android:background="@null"
android:scaleType="centerInside"
android:layout_marginStart="30dp"
android:src="@drawable/icon_align_left"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageButton
android:id="@+id/button_align_center"
android:layout_width="20dp"
android:layout_height="20dp"
android:background="@null"
android:scaleType="centerInside"
android:src="@drawable/icon_align_center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/button_align_right"
app:layout_constraintStart_toEndOf="@id/button_align_left"
app:layout_constraintTop_toTopOf="parent" />
<ImageButton
android:id="@+id/button_align_right"
android:layout_width="20dp"
android:layout_height="20dp"
android:background="@null"
android:scaleType="centerInside"
android:layout_marginEnd="30dp"
android:src="@drawable/icon_align_right"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="120dp"
android:layout_height="40dp"
android:layout_marginTop="20dp"
android:background="@drawable/markdown_button_area"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="@id/other_fragment_right_guide_line">
<ImageButton
android:id="@+id/button_ordered_list"
android:layout_width="20dp"
android:layout_height="20dp"
android:tag="ORDERED_LIST"
android:onClick="onClick"
android:src="@drawable/icon_ordered_list"
android:scaleType="centerInside"
android:background="@null"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/button_unordered_list"
tools:ignore="OnClick" />
<ImageButton
android:id="@+id/button_unordered_list"
android:tag="UNORDERED_LIST"
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@drawable/icon_unordered_list"
android:scaleType="centerInside"
android:background="@null"
android:onClick="onClick"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/button_ordered_list"
app:layout_constraintEnd_toEndOf="parent"
tools:ignore="OnClick" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.Guideline
android:id="@+id/other_fragment_left_guide_line"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_begin="12dp" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/other_fragment_right_guide_line"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_end="12dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment