Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
beyond-clouds-android
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
云深项目组
beyond-clouds-android
Commits
c28708a4
Commit
c28708a4
authored
Mar 26, 2020
by
Author name
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Merge branch 'page-zhangjinxiong' of D:\v0.1\beyond-clouds-android with conflicts.
parent
174b4943
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
422 additions
and
0 deletions
+422
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/ui/page/PublishQuestionActivity.java
+221
-0
app/src/main/java/cn/yunliyunwai/beyondclouds/ui/page/markdown/MarkdownButtonEnum.java
+90
-0
app/src/main/res/drawable-ldpi/icon_align_left.png
+0
-0
app/src/main/res/layout/fragment_other.xml
+111
-0
No files found.
app/src/main/java/cn/yunliyunwai/beyondclouds/ui/page/PublishQuestionActivity.java
0 → 100644
View file @
c28708a4
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
);
}
}
app/src/main/java/cn/yunliyunwai/beyondclouds/ui/page/markdown/MarkdownButtonEnum.java
0 → 100644
View file @
c28708a4
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
}
app/src/main/res/drawable-ldpi/icon_align_left.png
0 → 100644
View file @
c28708a4
1.86 KB
app/src/main/res/layout/fragment_other.xml
0 → 100644
View file @
c28708a4
<?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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment