Commit e55b71bc by Author name

3.26项目markdown编辑器完成

parent eaff56ca
......@@ -32,14 +32,15 @@
<activity android:name=".ui.page.projectSetting"></activity>
<activity android:name=".ui.page.ProjectPreviewPart"></activity>
<activity android:name=".ui.page.ProjectPreviewAll"></activity>
<activity android:name=".ui.page.ProjectFileLink"></activity>
<activity android:name=".ui.page.PublishBlogActivity">
<activity android:name=".ui.page.ProjectFileLink">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ui.page.PublishBlogActivity">
</activity>
<activity android:name=".ui.page.ProjectsActivity"></activity>
<activity android:name=".ui.page.FansActivity" />
......
package cn.yunliyunwai.beyondclouds.ui.page;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
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 androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import com.google.android.material.tabs.TabLayout;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
import cn.yunliyunwai.beyondclouds.R;
import cn.yunliyunwai.beyondclouds.databinding.ActivityProjectFileLinkBinding;
import cn.yunliyunwai.beyondclouds.ui.page.markdown.MarkdownButtonEnum;
import io.noties.markwon.AbstractMarkwonPlugin;
import io.noties.markwon.Markwon;
import io.noties.markwon.core.MarkwonTheme;
import io.noties.markwon.editor.MarkwonEditor;
import io.noties.markwon.editor.MarkwonEditorTextWatcher;
public class ProjectFileLink extends AppCompatActivity {
......@@ -16,6 +41,196 @@ public class ProjectFileLink extends AppCompatActivity {
binding = ActivityProjectFileLinkBinding.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.projectDocumentToolBar.setAdapter(new PublishQuestionViewPagerAdapter(getSupportFragmentManager(), this, list, tabImages));
binding.projectDocumentTabLayout.setupWithViewPager(binding.projectDocumentToolBar);
binding.projectDocumentToolBar.setCurrentItem(0);
binding.projectDocumentTabLayout.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) {
}
});
//markdown实时显示
final Markwon markwon = Markwon.builder(this)
.usePlugin(new AbstractMarkwonPlugin() {
@Override
public void configureTheme(@NonNull MarkwonTheme.Builder builder) {
builder
.codeTextColor(Color.GREEN)
.codeBackgroundColor(Color.GRAY);
}
})
.build();
final MarkwonEditor editor = MarkwonEditor.create(markwon);
binding.edtProjectDocumentText.addTextChangedListener(MarkwonEditorTextWatcher.withPreRender(
editor,
Executors.newCachedThreadPool(),
binding.edtProjectDocumentText
));
}
//点击头部图片时改变图片颜色
@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;
}
//字符串拼接形成表格
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();
}
//向输入框中添加markdown语法
private void addMarkdownGrammar(String grammar) {
String rawData = binding.edtProjectDocumentText.getText().toString();
StringBuilder data = new StringBuilder(rawData);
//将Markdown语法加入到data中并显示在页面上
data.append(grammar);
binding.edtProjectDocumentText.setText(data.toString());
//使页面指针停于data末尾
binding.edtProjectDocumentText.setSelection(binding.edtProjectDocumentText.getText().toString().length());
}
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);
}
}
}
package cn.yunliyunwai.beyondclouds.ui.page;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
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 androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import com.google.android.material.tabs.TabLayout;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
import cn.yunliyunwai.beyondclouds.R;
import cn.yunliyunwai.beyondclouds.databinding.ActivityProjectPublicBinding;
import cn.yunliyunwai.beyondclouds.databinding.ActivityQrcodecardBinding;
import cn.yunliyunwai.beyondclouds.ui.page.markdown.MarkdownButtonEnum;
import io.noties.markwon.AbstractMarkwonPlugin;
import io.noties.markwon.Markwon;
import io.noties.markwon.core.MarkwonTheme;
import io.noties.markwon.editor.MarkwonEditor;
import io.noties.markwon.editor.MarkwonEditorTextWatcher;
public class ProjectPublic extends AppCompatActivity {
......@@ -17,6 +42,197 @@ public class ProjectPublic extends AppCompatActivity {
binding = ActivityProjectPublicBinding.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.projectToolBar.setAdapter(new PublishQuestionViewPagerAdapter(getSupportFragmentManager(), this, list, tabImages));
binding.projectTabLayout.setupWithViewPager(binding.projectToolBar);
binding.projectToolBar.setCurrentItem(0);
binding.projectTabLayout.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) {
}
});
//markdown实时显示
final Markwon markwon = Markwon.builder(this)
.usePlugin(new AbstractMarkwonPlugin() {
@Override
public void configureTheme(@NonNull MarkwonTheme.Builder builder) {
builder
.codeTextColor(Color.GREEN)
.codeBackgroundColor(Color.GRAY);
}
})
.build();
final MarkwonEditor editor = MarkwonEditor.create(markwon);
binding.edtProjectText.addTextChangedListener(MarkwonEditorTextWatcher.withPreRender(
editor,
Executors.newCachedThreadPool(),
binding.edtProjectText
));
}
//点击头部图片时改变图片颜色
@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;
}
//字符串拼接形成表格
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();
}
//向输入框中添加markdown语法
private void addMarkdownGrammar(String grammar) {
String rawData = binding.edtProjectText.getText().toString();
StringBuilder data = new StringBuilder(rawData);
//将Markdown语法加入到data中并显示在页面上
data.append(grammar);
binding.edtProjectText.setText(data.toString());
//使页面指针停于data末尾
binding.edtProjectText.setSelection(binding.edtProjectText.getText().toString().length());
}
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);
}
}
}
......@@ -4,16 +4,20 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingStart="12dp"
android:paddingEnd="12dp">
>
<cn.yunliyunwai.beyondclouds.view.BeyondToolBar
android:id="@+id/tool_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginEnd="24dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/edt_project_document_text"
android:layout_width="match_parent"
android:layout_height="150dp"
android:paddingStart="12dp"
......@@ -26,81 +30,26 @@
android:gravity="start"
android:background="@drawable/background_project_circle_file_link"
android:layout_marginTop="84dp"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<androidx.constraintlayout.widget.ConstraintLayout
<androidx.viewpager.widget.ViewPager
android:id="@+id/project_document_tool_bar"
android:layout_width="match_parent"
android:layout_height="44dp"
android:background="#f5f8fa"
android:layout_marginBottom="300dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_height="0dp"
android:background="#efefef"
app:layout_constraintTop_toBottomOf="@id/edt_project_document_text"
app:layout_constraintBottom_toBottomOf="parent">
<com.google.android.material.tabs.TabLayout
android:id="@+id/project_document_tab_layout"
android:background="#f5f8fa"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<cn.yunliyunwai.beyondclouds.view.BeyondTextIcon
android:id="@+id/btn_photo_choose"
android:layout_width="20dp"
android:layout_height="22dp"
android:layout_marginStart="36dp"
android:text="@string/icon_photo_choose"
android:textColor="@color/colorText"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<cn.yunliyunwai.beyondclouds.view.BeyondTextIcon
android:id="@+id/btn_code"
android:layout_width="25dp"
android:layout_height="22dp"
android:text="@string/icon_code"
android:textColor="@color/colorText"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/btn_link"
app:layout_constraintStart_toEndOf="@+id/btn_photo_choose"
app:layout_constraintTop_toTopOf="parent" />
<cn.yunliyunwai.beyondclouds.view.BeyondTextIcon
android:id="@+id/btn_link"
android:layout_width="20dp"
android:layout_height="22dp"
android:text="@string/icon_link"
android:textColor="@color/colorText"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/btn_emj"
app:layout_constraintStart_toEndOf="@+id/btn_code"
app:layout_constraintTop_toTopOf="parent" />
<cn.yunliyunwai.beyondclouds.view.BeyondTextIcon
android:id="@+id/btn_emj"
android:layout_width="20dp"
android:layout_height="22dp"
android:text="@string/icon_emj_choose"
android:textColor="@color/colorText"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/btn_topic"
app:layout_constraintStart_toEndOf="@+id/btn_link"
app:layout_constraintTop_toTopOf="parent" />
<cn.yunliyunwai.beyondclouds.view.BeyondTextIcon
android:id="@+id/btn_topic"
android:layout_width="20dp"
android:layout_height="22dp"
android:layout_marginEnd="36dp"
android:text="@string/icon_topic_choose"
android:textColor="@color/colorText"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.viewpager.widget.ViewPager>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -4,8 +4,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingStart="12dp"
android:paddingEnd="12dp">
>
<EditText
android:id="@+id/edt_title"
......@@ -19,6 +18,8 @@
android:lines="1"
android:gravity="center_vertical"
android:layout_marginTop="64dp"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
......@@ -36,6 +37,8 @@
android:gravity="center_vertical"
android:paddingStart="15dp"
android:paddingEnd="15dp"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/edt_title" />
......@@ -52,78 +55,26 @@
android:gravity="start"
android:paddingTop="16dp"
android:scrollbars="vertical"
android:layout_marginStart="12dp"
android:layout_marginEnd="12dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/edt_introduction" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="44dp"
android:background="#f5f8fa"
app:layout_constraintTop_toBottomOf="@+id/edt_project_text">
<cn.yunliyunwai.beyondclouds.view.BeyondTextIcon
android:id="@+id/btn_photo_choose"
android:layout_width="20dp"
android:layout_height="22dp"
android:text="@string/icon_photo_choose"
android:textSize="16sp"
android:textColor="@color/colorText"
android:layout_marginStart="36dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
<cn.yunliyunwai.beyondclouds.view.BeyondTextIcon
android:id="@+id/btn_code"
android:layout_width="25dp"
android:layout_height="22dp"
android:text="@string/icon_code"
android:textSize="16sp"
android:textColor="@color/colorText"
app:layout_constraintStart_toEndOf="@+id/btn_photo_choose"
app:layout_constraintEnd_toStartOf="@+id/btn_link"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
<cn.yunliyunwai.beyondclouds.view.BeyondTextIcon
android:id="@+id/btn_link"
android:layout_width="20dp"
android:layout_height="22dp"
android:text="@string/icon_link"
android:textSize="16sp"
android:textColor="@color/colorText"
app:layout_constraintStart_toEndOf="@+id/btn_code"
app:layout_constraintEnd_toStartOf="@+id/btn_emj"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
<cn.yunliyunwai.beyondclouds.view.BeyondTextIcon
android:id="@+id/btn_emj"
android:layout_width="20dp"
android:layout_height="22dp"
android:text="@string/icon_emj_choose"
android:textSize="16sp"
android:textColor="@color/colorText"
app:layout_constraintStart_toEndOf="@+id/btn_link"
app:layout_constraintEnd_toStartOf="@+id/btn_topic"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
<cn.yunliyunwai.beyondclouds.view.BeyondTextIcon
android:id="@+id/btn_topic"
android:layout_width="20dp"
android:layout_height="22dp"
android:text="@string/icon_topic_choose"
android:textSize="16sp"
android:textColor="@color/colorText"
android:layout_marginEnd="36dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
<androidx.viewpager.widget.ViewPager
android:id="@+id/project_tool_bar"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="#efefef"
app:layout_constraintTop_toBottomOf="@id/edt_project_text"
app:layout_constraintBottom_toBottomOf="parent">
<com.google.android.material.tabs.TabLayout
android:id="@+id/project_tab_layout"
android:background="#f5f8fa"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.viewpager.widget.ViewPager>
</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