This commit is contained in:
lunaticbum 2024-11-07 16:35:47 +09:00
parent 87ded0bda5
commit 0a77bd69d7
39 changed files with 1438 additions and 152 deletions

View File

@ -109,6 +109,16 @@
<action android:name="android.intent.action.APPLICATION_PREFERENCES" /> <action android:name="android.intent.action.APPLICATION_PREFERENCES" />
</intent-filter> </intent-filter>
</activity> </activity>
<activity
android:name=".behavior.Behavior"
android:label="@string/lunar_settings"
android:launchMode="singleTask"
android:excludeFromRecents="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.APPLICATION_PREFERENCES" />
</intent-filter>
</activity>
<service <service
android:name=".feeds.rss.RssService" android:name=".feeds.rss.RssService"

View File

@ -0,0 +1,143 @@
package bums.lunatic.launcher.behavior
import android.content.Intent
import android.graphics.Color
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.animation.AnimationUtils
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.WindowCompat
import androidx.recyclerview.widget.RecyclerView
import bums.lunatic.launcher.R
import bums.lunatic.launcher.behavior.calendar.CalendarAdapter
import bums.lunatic.launcher.behavior.calendar.CalendarBean
import bums.lunatic.launcher.behavior.calendar.CalendarDateView
import bums.lunatic.launcher.behavior.calendar.CalendarFactory.getMonthOfDayList
import bums.lunatic.launcher.behavior.calendar.CalendarUtil
import bums.lunatic.launcher.behavior.calendar.CalendarView
import bums.lunatic.launcher.databinding.ItemCalendarBinding
import com.google.android.material.appbar.AppBarLayout
import java.util.Date
import kotlin.math.abs
class Behavior: AppCompatActivity() {
private val sampleAdapter by lazy { SampleAdapter() }
private val getYMax by lazy {
resources.getDimension(R.dimen.appbar_height) - resources.getDimension(
R.dimen.toolbar_height
)
}
private val fadeIn by lazy { AnimationUtils.loadAnimation(this, R.anim.fade_in) }
private val fadeOut by lazy { AnimationUtils.loadAnimation(this, R.anim.fade_out) }
val dateArr: IntArray = CalendarUtil.getYMD(Date())
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
WindowCompat.setDecorFitsSystemWindows(window, false)
setContentView(R.layout.behavior)
initTopBarAnimation()
initRecyclerView()
loadSample()
}
private fun initTopBarAnimation() {
val appBarLayout = findViewById<AppBarLayout>(R.id.app_bar_layout)
val back = findViewById<ImageView>(R.id.iv_back)
val del = findViewById<ImageView>(R.id.iv_del)
val share = findViewById<ImageView>(R.id.iv_share)
val cal = findViewById<RecyclerView>(R.id.calendarDateView)
appBarLayout.addOnOffsetChangedListener(
AppBarLayout.OnOffsetChangedListener { _, verticalOffset ->
if (abs(verticalOffset) >= getYMax / 2) {
if (back.visibility != View.GONE) {
back.startAnimation(fadeOut)
del.startAnimation(fadeOut)
share.startAnimation(fadeOut)
back.visibility = View.GONE
del.visibility = View.GONE
share.visibility = View.GONE
var lp = cal.layoutParams
lp.height = resources.getDimension(R.dimen.toolbar_height).toInt()
cal.layoutParams = lp
}
} else {
if (back.visibility != View.VISIBLE) {
back.startAnimation(fadeIn)
del.startAnimation(fadeIn)
share.startAnimation(fadeIn)
back.visibility = View.VISIBLE
del.visibility = View.VISIBLE
share.visibility = View.VISIBLE
var lp = cal.layoutParams
lp.height = resources.getDimension(R.dimen.appbar_height).toInt()
cal.layoutParams = lp
}
}
}
)
}
private fun initRecyclerView() {
with(findViewById<RecyclerView>(R.id.rv_main)) {
adapter = sampleAdapter
}
with(findViewById<RecyclerView>(R.id.calendarDateView)) {
adapter = CalAdapter().apply {
items.clear()
items.addAll(getMonthOfDayList(
dateArr[0],
dateArr[1]
))
}
}
}
private fun loadSample() {
sampleAdapter.notifySample()
}
}
class CalAdapter : RecyclerView.Adapter<CalAdapter.CalViewHolder>() {
val items = mutableListOf<CalendarBean>()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = CalViewHolder(ItemCalendarBinding.inflate(LayoutInflater.from(parent.context)))
override fun onBindViewHolder(holder: CalViewHolder, position: Int) {
holder.bind.day.apply {
val bean = items[position]
this.text = bean?.day.toString()
if (bean?.monthFlag != 0) {
this.setTextColor(Color.WHITE)
} else {
this.setTextColor(Color.BLACK)
}
}
}
override fun getItemCount() = items.size
// fun notifySample() {
// items.clear()
// (1..10).forEach {
// items.add(it)
// }
// notifyDataSetChanged()
// }
class CalViewHolder(val bind: ItemCalendarBinding) : RecyclerView.ViewHolder(bind.root)
}

View File

@ -0,0 +1,31 @@
package bums.lunatic.launcher.behavior
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import bums.lunatic.launcher.R
class SampleAdapter : RecyclerView.Adapter<SampleAdapter.SampleViewHolder>() {
private val items = mutableListOf<Int>()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = SampleViewHolder(parent)
override fun onBindViewHolder(holder: SampleViewHolder, position: Int) {
//..
}
override fun getItemCount() = items.size
fun notifySample() {
items.clear()
(1..10).forEach {
items.add(it)
}
notifyDataSetChanged()
}
class SampleViewHolder(parent: ViewGroup) : RecyclerView.ViewHolder(
LayoutInflater.from(parent.context).inflate(R.layout.item_sample, parent, false),
)
}

View File

@ -0,0 +1,82 @@
package bums.lunatic.launcher.behavior.behaviorimpl
import android.content.Context
import android.util.AttributeSet
import android.util.DisplayMetrics
import android.util.TypedValue
import android.view.View
import android.widget.TextView
import androidx.annotation.NonNull
import androidx.coordinatorlayout.widget.CoordinatorLayout
import bums.lunatic.launcher.R
import com.google.android.material.appbar.AppBarLayout
import kotlin.math.abs
class BehaviorBlackJin(context: Context, attrs: AttributeSet?) :
CoordinatorLayout.Behavior<TextView>(context, attrs) {
private val mContext: Context = context
private val marginTop: Float
private val marginTopAfter: Float
private val getYMax: Float =
context.getResources().getDimension(R.dimen.appbar_height) - context.getResources()
.getDimension(R.dimen.toolbar_height)
init {
marginTop = dpToPx(getYMax / 4)
marginTopAfter = dpToPx(getYMax / 8)
}
override fun layoutDependsOn(
@NonNull parent: CoordinatorLayout,
@NonNull child: TextView,
@NonNull dependency: View
): Boolean {
return dependency is AppBarLayout
}
/**
* dependency View 변화가 있을때 이벤트가 들어옵니다.
*/
override fun onDependentViewChanged(
@NonNull parent: CoordinatorLayout,
@NonNull child: TextView,
@NonNull dependency: View
): Boolean {
child.alpha = getRatioValue(
1f, 0f,
abs(dependency.y.toDouble()).toFloat(), getYMax
)
child.alpha = getRatioValue(
1f, 0f,
abs(dependency.y.toDouble()).toFloat(), getYMax
)
child.x = (dependency.width / 2 - (child.width / 2)).toFloat()
child.y = getRatioValue(
marginTop, marginTopAfter,
abs(dependency.y.toDouble()).toFloat(), getYMax
)
return false
}
private fun dpToPx(dp: Float): Float {
val dm: DisplayMetrics = mContext.getResources().getDisplayMetrics()
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, dm).toInt()
.toFloat()
}
private fun getRatioValue(
firstValue: Float,
lastValue: Float,
getY: Float,
getYMax: Float
): Float {
val temp = -(firstValue - lastValue) * getY / getYMax
return firstValue + temp
}
}

View File

@ -0,0 +1,84 @@
package bums.lunatic.launcher.behavior.behaviorimpl
import android.content.Context
import android.util.AttributeSet
import android.util.DisplayMetrics
import android.util.TypedValue
import android.view.View
import android.widget.TextView
import androidx.annotation.NonNull
import androidx.coordinatorlayout.widget.CoordinatorLayout
import bums.lunatic.launcher.R
import com.google.android.material.appbar.AppBarLayout
import kotlin.math.abs
class BehaviorTistory(context: Context, attrs: AttributeSet?) :
CoordinatorLayout.Behavior<TextView>(context, attrs) {
private val mContext: Context = context
private val marginLeft: Float
private val marginTop: Float
private val marginTopAfter: Float
private val getYMax: Float =
context.getResources().getDimension(R.dimen.appbar_height) - context.getResources()
.getDimension(R.dimen.toolbar_height)
init {
marginLeft = dpToPx(70f)
marginTop = dpToPx(70f)
marginTopAfter = dpToPx(53f)
}
override fun layoutDependsOn(
@NonNull parent: CoordinatorLayout,
@NonNull child: TextView,
@NonNull dependency: View
): Boolean {
return dependency is AppBarLayout
}
/**
* dependency View 변화가 있을때 이벤트가 들어옵니다.
*/
override fun onDependentViewChanged(
@NonNull parent: CoordinatorLayout,
@NonNull child: TextView,
@NonNull dependency: View
): Boolean {
child.scaleX = getRatioValue(
1f, 0.8f,
abs(dependency.y.toDouble()).toFloat(), getYMax
)
child.x = getRatioValue(
marginLeft, ((dependency.width - child.width) / 2).toFloat(),
abs(dependency.y.toDouble()).toFloat(), getYMax
)
child.y = getRatioValue(
marginTop, marginTopAfter,
abs(dependency.y.toDouble()).toFloat(), getYMax
)
return false
}
private fun dpToPx(dp: Float): Float {
val dm: DisplayMetrics = mContext.getResources().getDisplayMetrics()
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, dm).toInt()
.toFloat()
}
private fun getRatioValue(
firstValue: Float,
lastValue: Float,
getY: Float,
getYMax: Float
): Float {
val temp = -(firstValue - lastValue) * getY / getYMax
return firstValue + temp
}
}

View File

@ -0,0 +1,91 @@
package bums.lunatic.launcher.behavior.behaviorimpl
import android.content.Context
import android.util.AttributeSet
import android.util.DisplayMetrics
import android.util.TypedValue
import android.view.View
import android.widget.ImageView
import androidx.annotation.NonNull
import androidx.coordinatorlayout.widget.CoordinatorLayout
import bums.lunatic.launcher.R
import com.google.android.material.appbar.AppBarLayout
import kotlin.math.abs
class BehaviorTopBall(context: Context, attrs: AttributeSet?) :
CoordinatorLayout.Behavior<ImageView>(context, attrs) {
private val mContext: Context = context
private val iconMarginLeft: Float
private val iconMarginTop: Float
private val iconMarginTopAfter: Float
private val getYMax: Float =
context.getResources().getDimension(R.dimen.appbar_height) - context.getResources()
.getDimension(R.dimen.toolbar_height)
init {
iconMarginLeft = dpToPx(30f)
iconMarginTop = dpToPx(72f)
iconMarginTopAfter = dpToPx(20f)
}
override fun layoutDependsOn(
@NonNull parent: CoordinatorLayout,
@NonNull child: ImageView,
@NonNull dependency: View
): Boolean {
return dependency is AppBarLayout
}
/**
* dependency View 변화가 있을때 이벤트가 들어옵니다.
*/
override fun onDependentViewChanged(
@NonNull parent: CoordinatorLayout,
@NonNull child: ImageView,
@NonNull dependency: View
): Boolean {
// child icon scale [1 , 0.8]
child.scaleX = getRatioValue(
1f, 0.8f,
abs(dependency.y.toDouble()).toFloat(), getYMax
)
child.scaleY = getRatioValue(
1f, 0.8f,
abs(dependency.y.toDouble()).toFloat(), getYMax
)
// child icon set x [iconMarginLeft , (dependency.getWidth() - child.getWidth())/2]
child.x = getRatioValue(
iconMarginLeft, ((dependency.width - child.width) / 2).toFloat(),
abs(dependency.y.toDouble()).toFloat(), getYMax
)
// child icon set y [iconMarginTop, iconMarginTopAfter]
child.y = getRatioValue(
iconMarginTop, iconMarginTopAfter,
abs(dependency.y.toDouble()).toFloat(), getYMax
)
return false
}
private fun dpToPx(dp: Float): Float {
val dm: DisplayMetrics = mContext.getResources().getDisplayMetrics()
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, dm).toInt()
.toFloat()
}
private fun getRatioValue(
firstValue: Float,
lastValue: Float,
getY: Float,
getYMax: Float
): Float {
val temp = -(firstValue - lastValue) * getY / getYMax
return firstValue + temp
}
}

View File

@ -0,0 +1,10 @@
package bums.lunatic.launcher.behavior.calendar
import android.view.View
import android.view.ViewGroup
interface CalendarAdapter {
fun getView(convertView: View?, parentView: ViewGroup?, bean: CalendarBean?): View
// fun hasChildView() : Boolean
}

View File

@ -0,0 +1,54 @@
//package bums.lunatic.launcher.behavior.calendar;
//
//public class CalendarBean {
// public int year;
// public int month;
// public int day;
// public int week;
//
// //-1,0,1
// public int monthFlag;
//
// //显示
//
// public CalendarBean(int year, int month, int day) {
// this.year = year;
// this.month = month;
// this.day = day;
// }
//
// public String getDisplayWeek(){
// String s="";
// switch(week){
// case 1:
// s="星期日";
// break;
// case 2:
// s="星期一";
// break;
// case 3:
// s="星期二";
// break;
// case 4:
// s="星期三";
// break;
// case 5:
// s="星期四";
// break;
// case 6:
// s="星期五";
// break;
// case 7:
// s="星期六";
// break;
//
// }
// return s ;
// }
//
// @Override
// public String toString() {
// String s=year+"/"+month+"/"+day;
// return s;
// }
//}

View File

@ -0,0 +1,29 @@
package bums.lunatic.launcher.behavior.calendar
class CalendarBean //显示
(var year: Int, var month: Int, var day: Int) {
var week: Int = 0
//-1,0,1
var monthFlag: Int = 0
val displayWeek: String
get() {
var s = ""
when (week) {
1 -> s = "星期日"
2 -> s = "星期一"
3 -> s = "星期二"
4 -> s = "星期三"
5 -> s = "星期四"
6 -> s = "星期五"
7 -> s = "星期六"
}
return s
}
override fun toString(): String {
val s = "$year/$month/$day"
return s
}
}

View File

@ -0,0 +1,152 @@
package bums.lunatic.launcher.behavior.calendar
import android.content.Context
import android.util.AttributeSet
import android.util.Log
import android.view.View
import android.view.ViewGroup
import androidx.viewpager.widget.PagerAdapter
import androidx.viewpager.widget.ViewPager
import bums.lunatic.launcher.R
import bums.lunatic.launcher.behavior.calendar.CalendarFactory.getMonthOfDayList
import com.example.accountbook.calendar.CalendarTopView
import com.example.accountbook.calendar.CalendarTopViewChangeListener
import java.util.Date
import java.util.LinkedList
class CalendarDateView(context: Context, attrs: AttributeSet?):
ViewPager(context, attrs), CalendarTopView {
var views = HashMap<Int, CalendarView>()
private var mCaledarLayoutChangeListener: CalendarTopViewChangeListener? = null
private var onItemClickListener: CalendarView.OnItemClickListener? = null
private val cache: LinkedList<CalendarView?> = LinkedList<CalendarView?>()
private val MAXCOUNT = 6
private var row = 6
fun setCalrow(row : Int) {
this.row = row
}
private var mAdapter: CalendarAdapter? = null
override var itemHeight = 0
private set
fun setAdapter(adapter: CalendarAdapter?) {
mAdapter = adapter
initialize()
initData()
}
fun reload() {
Log.i(this@CalendarDateView.javaClass.simpleName , "reload()")
sss.notifyDataSetChanged()
}
fun setOnItemClickListener(onItemClickListener: CalendarView.OnItemClickListener?) {
this.onItemClickListener = onItemClickListener
}
init {
val a = context.obtainStyledAttributes(attrs, R.styleable.CalendarDateView)
row = a.getInteger(R.styleable.CalendarDateView_cbd_calendar_row, 6)
a.recycle()
}
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
// var calendarHeight = 0
if (adapter != null) {
(getChildAt(0) as CalendarView)?.let {
// calendarHeight = it.measuredHeight
itemHeight = it.itemHeight
}
}
setMeasuredDimension(
widthMeasureSpec,
MeasureSpec.makeMeasureSpec(heightMeasureSpec, MeasureSpec.EXACTLY)
)
}
val dateArr: IntArray = CalendarUtil.getYMD(Date())
var sss = object : PagerAdapter() {
override fun getCount(): Int {
// Log.i(this@CalendarDateView::class.java.simpleName, "container >>> setAdapter getCount")
return Int.MAX_VALUE
}
override fun isViewFromObject(view: View, `object`: Any): Boolean {
return view === `object`
}
override fun instantiateItem(container: ViewGroup, position: Int): Any {
Log.i(this@CalendarDateView::class.java.simpleName, "container >>> ${container} position >> ${position}")
val view: CalendarView = if (!cache.isEmpty()) {
cache.removeFirst()!!
} else {
CalendarView(container.context, row)
}
view.setOnItemClickListener(onItemClickListener)
view.setAdapter(mAdapter)
container.addView(view)
views[position] = view
view.apply {
setData(
getMonthOfDayList(
dateArr[0],
dateArr[1] + position - Int.MAX_VALUE / 2
), position == Int.MAX_VALUE / 2
)
}
return view
}
override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
Log.i(this@CalendarDateView.javaClass.simpleName , "destroyItem >>> position ${position}")
container.removeView(`object` as View)
cache.addLast(`object` as CalendarView)
views.remove(position)
}
}
private fun initialize() {
setAdapter(sss)
addOnPageChangeListener(object: SimpleOnPageChangeListener() {
override fun onPageSelected(position: Int) {
super.onPageSelected(position)
onItemClickListener?.let{
views[position]?.let {v ->
val obs: Array<Any> = v.select
it.onItemClick(
obs[0] as View,
obs[1] as Int,
obs[2] as CalendarBean
)
}
}
mCaledarLayoutChangeListener?.onLayoutChange(this@CalendarDateView)
}
})
}
private fun initData() {
setCurrentItem(Int.MAX_VALUE / 2, false)
adapter!!.notifyDataSetChanged()
}
override val currentSelectPositon: IntArray
get() {
var view = views[currentItem]
if (view == null) {
view = getChildAt(0) as? CalendarView
}
return view?.getSelectPosition() ?: IntArray(4)
}
override fun setCalendarTopViewChangeListener(listener: CalendarTopViewChangeListener?) {
mCaledarLayoutChangeListener = listener
}
}

View File

@ -0,0 +1,66 @@
package bums.lunatic.launcher.behavior.calendar
import android.util.Log
import bums.lunatic.launcher.behavior.calendar.CalendarUtil.getDayOfWeek
import java.util.Calendar
object CalendarFactory {
private val cache = HashMap<String, List<CalendarBean>>()
fun getMonthOfDayList(y: Int, m: Int): List<CalendarBean> {
Log.e("TIME CHECK" , "fun getMonthOfDayList Start")
val key = y.toString() + "" + m
if (cache.containsKey(key)) {
val list = cache[key]
if (list == null) {
cache.remove(key)
} else {
return list
}
}
val list: MutableList<CalendarBean> = ArrayList()
cache[key] = list
val fweek: Int = getDayOfWeek(y, m, 1)
val total: Int = CalendarUtil.getDayOfMaonth(y, m)
for (i in fweek - 1 downTo 1) {
val bean = getCalendarBean(y, m, 1 - i)
bean.monthFlag = -1
list.add(bean)
}
for (i in 0 until total) {
val bean = getCalendarBean(y, m, i + 1)
list.add(bean)
}
for (i in 0 until 42 - (fweek - 1) - total) {
val bean = getCalendarBean(y, m, total + i + 1)
bean.monthFlag = 1
list.add(bean)
}
Log.e("TIME CHECK" , "fun getMonthOfDayList END")
return list
}
fun getCalendarBean(year: Int, month: Int, day: Int): CalendarBean {
val calendar: Calendar = Calendar.getInstance()
.apply { this.set(year, month - 1, day) }
val year = calendar.get(Calendar.YEAR)
val month = calendar.get(Calendar.MONTH) + 1
val day = calendar.get(Calendar.DATE)
val bean = CalendarBean(year, month, day)
bean.week = CalendarUtil.getDayOfWeek(year, month, day)
// val chinaDate: Array<String> = ChinaDate.getChinaDate(year, month, day)
// bean.chinaMonth = chinaDate[0]
// bean.chinaDay = chinaDate[1]
return bean
}
@JvmStatic
fun main(args: Array<String>) {
}
}

View File

@ -0,0 +1,9 @@
package com.example.accountbook.calendar
interface CalendarTopView {
val currentSelectPositon: IntArray?
val itemHeight: Int
fun setCalendarTopViewChangeListener(listener: CalendarTopViewChangeListener?)
}

View File

@ -0,0 +1,7 @@
package com.example.accountbook.calendar
interface CalendarTopViewChangeListener {
fun onLayoutChange(topView: CalendarTopView) {
}
}

View File

@ -0,0 +1,37 @@
package bums.lunatic.launcher.behavior.calendar
import java.util.Calendar
import java.util.Date
object CalendarUtil {
fun getDayOfWeek(y: Int, m: Int, day: Int): Int {
val calendar: Calendar = Calendar.getInstance()
calendar.set(y, m - 1, day)
return calendar.get(Calendar.DAY_OF_WEEK)
}
//获取一月最大天数
fun getDayOfMaonth(y: Int, m: Int): Int {
val cal: Calendar = Calendar.getInstance()
cal.set(y, m - 1, 1)
return cal.getActualMaximum(Calendar.DATE)
}
fun getMothOfMonth(y: Int, m: Int): Int {
val cal: Calendar = Calendar.getInstance()
cal.set(y, m - 1, 1)
val dateOfMonth: Int = cal.get(Calendar.MONTH)
return dateOfMonth + 1
}
fun getYMD(date: Date?): IntArray {
val cal: Calendar = Calendar.getInstance()
date?.let { cal.setTime(it) }
return intArrayOf(
cal.get(Calendar.YEAR),
cal.get(Calendar.MONTH) + 1,
cal.get(Calendar.DATE)
)
}
}

View File

@ -0,0 +1,201 @@
package bums.lunatic.launcher.behavior.calendar
import android.content.Context
import android.graphics.Rect
import android.util.AttributeSet
import android.util.Log
import android.view.View
import android.view.ViewGroup
import bums.lunatic.launcher.behavior.calendar.CalendarUtil.getYMD
import java.util.Date
class CalendarView : ViewGroup {
private var selectPosition = -1
private var adapter: CalendarAdapter? = null
private var data: List<CalendarBean>? = null
private var onItemClickListener: OnItemClickListener? = null
private var row = 6
private val column = 7
private var itemWidth = 0
var itemHeight = 0
private set
private var isToday = false
interface OnItemClickListener {
fun onItemClick(view: View?, position: Int, bean: CalendarBean?)
}
constructor(context: Context?, row: Int) : super(context) {
this.row = row
}
fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) {
this.onItemClickListener = onItemClickListener
}
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {
setWillNotDraw(false)
}
fun setAdapter(adapter: CalendarAdapter?) {
this.adapter = adapter
}
fun setCalrow(row : Int) {
if (this.row != row) {
this.row = row
removeAllViews()
}
}
fun setData(data: List<CalendarBean>?, isToday: Boolean) {
this.data = data
this.isToday = isToday
setItem()
requestLayout()
}
private fun setItem() {
selectPosition = -1
if (adapter == null) {
throw RuntimeException("adapter is null,please setadapter")
}
Log.i("data >>> ","data ${data}")
for (i in data!!.indices) {
val bean = data!![i]
val chidView: View? = adapter?.getView(
getChildAt(i).also { v -> Log.i("data >>> ", "view $v") },
this,
bean
).also { v -> Log.i("data >>> ", "chidView $v") }
if (chidView != null && chidView != getChildAt(i)) {
addViewInLayout(chidView, i, chidView.layoutParams, true)
}
if (isToday && selectPosition == -1) {
val date = getYMD(Date())
if (bean.year == date[0] && bean.month == date[1] && bean.day == date[2]) {
selectPosition = i
}
} else {
if (selectPosition == -1 && bean.day == 1) {
selectPosition = i
}
}
chidView?.isSelected = selectPosition == i
setItemClick(chidView, i, bean)
}
}
val select: Array<Any>
get() = arrayOf(
getChildAt(selectPosition), selectPosition,
data!![selectPosition]
)
fun setItemClick(view: View?, potsion: Int, bean: CalendarBean?) {
view?.setOnClickListener {
if (selectPosition != -1) {
getChildAt(selectPosition).isSelected = false
getChildAt(potsion).isSelected = true
}
selectPosition = potsion
if (onItemClickListener != null) {
onItemClickListener!!.onItemClick(view, potsion, bean)
}
}
}
fun getSelectPosition(): IntArray {
val rect = Rect()
try {
getChildAt(selectPosition).getHitRect(rect)
} catch (e: Exception) {
e.printStackTrace()
}
return intArrayOf(rect.left, rect.top, rect.right, rect.top)
}
var lastwidthMeasureSpec = 0
var lastheightMeasureSpec = 0
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
Log.e(this.javaClass::class.java.simpleName , "this count check ${this}")
if (widthMeasureSpec != lastwidthMeasureSpec || heightMeasureSpec != lastheightMeasureSpec) {
val parentWidth =
MeasureSpec.getSize(
MeasureSpec.makeMeasureSpec(
widthMeasureSpec,
MeasureSpec.EXACTLY
)
)
val parentH =
MeasureSpec.getSize(
MeasureSpec.makeMeasureSpec(
heightMeasureSpec,
MeasureSpec.EXACTLY
)
)
itemWidth = parentWidth / column
itemHeight = parentH / row
// itemWidth
val view = getChildAt(0) ?: return
val params = view.layoutParams
if (params != null && params.height > 0) {
itemHeight = params.height
}
setMeasuredDimension(parentWidth, itemHeight * row)
if (childCount.equals(row*column))
for (i in 0 until childCount) {
val childView = getChildAt(i)
childView.measure(
MeasureSpec.makeMeasureSpec(itemWidth, MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(itemHeight, MeasureSpec.EXACTLY)
)
}
}
Log.i(
TAG,
"onMeasure() called with: itemHeight = [$itemHeight], itemWidth = [$itemWidth]"
)
lastwidthMeasureSpec = widthMeasureSpec
lastheightMeasureSpec = heightMeasureSpec
}
override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) {
if (changed && childCount.equals(row*column))
for (i in 0 until childCount) {
layoutChild(getChildAt(i), i, l, t, r, b)
}
}
override fun addViewInLayout(
child: View?,
index: Int,
params: LayoutParams?,
preventRequestLayout: Boolean
): Boolean {
Log.d("CalendarView, time","time")
return super.addViewInLayout(child, index, params, preventRequestLayout)
}
private fun layoutChild(view: View, position: Int, l: Int, t: Int, r: Int, b: Int) {
var l = l
var t = t
var r = r
var b = b
val cc = position % column
val cr = position / column
val itemWidth = view.measuredWidth
val itemHeight = view.measuredHeight
l = cc * itemWidth
t = cr * itemHeight
r = l + itemWidth
b = t + itemHeight
view.layout(l, t, r, b)
}
companion object {
private const val TAG = "CalendarView"
}
}

View File

@ -267,10 +267,10 @@ internal class Feeds : Fragment() , CommadCallabck {
// consoleLog("${cmd[0]} END ${cmd[1]}") // consoleLog("${cmd[0]} END ${cmd[1]}")
// } // }
CoroutineScope(Dispatchers.IO).launch { CoroutineScope(Dispatchers.IO).launch {
consoleLog("on Cmd JF with SO") consoleLog("on Cmd JF with MOST")
consoleLog("${cmd[0]} Start ${cmd[1]}") consoleLog("${cmd[0]} Start ${cmd[1]}")
String.format(String(Base64.getMimeDecoder().decode("aHR0cHM6Ly9rcjcwLnNvZ2lybC5zby8/cz0lcw==".toByteArray())),cmd[1]).getJ().let { doc -> FeedParseManager.parse(doc){consoleLog(it)} } String.format(String(Base64.getMimeDecoder().decode("aHR0cHM6Ly9rcjcwLnNvZ2lybC5zby8/cz0lcw==".toByteArray())),cmd[1]).getJ().let { doc -> FeedParseManager.parse(doc){consoleLog(it)} }
consoleLog("current j req() ${WorkersDb.getRealm().query<RssData>("category == $0", RssDataType.GURU.name).find().size}") consoleLog("current j req() ${WorkersDb.getRealm().query<RssData>("category == $0", RssDataType.MOST.name).find().size}")
consoleLog("${cmd[0]} END ${cmd[1]}") consoleLog("${cmd[0]} END ${cmd[1]}")
} }
} }

View File

@ -56,6 +56,7 @@ import androidx.recyclerview.widget.RecyclerView
import androidx.viewpager2.widget.ViewPager2 import androidx.viewpager2.widget.ViewPager2
import bums.lunatic.launcher.LauncherActivity.Companion.lActivity import bums.lunatic.launcher.LauncherActivity.Companion.lActivity
import bums.lunatic.launcher.R import bums.lunatic.launcher.R
import bums.lunatic.launcher.behavior.Behavior
import bums.lunatic.launcher.databinding.LauncherHomeBinding import bums.lunatic.launcher.databinding.LauncherHomeBinding
import bums.lunatic.launcher.helpers.Constants.Companion.BOTTOM_SHEET_TAG import bums.lunatic.launcher.helpers.Constants.Companion.BOTTOM_SHEET_TAG
import bums.lunatic.launcher.helpers.Constants.Companion.KEY_LOCK_METHOD import bums.lunatic.launcher.helpers.Constants.Companion.KEY_LOCK_METHOD
@ -162,7 +163,6 @@ internal class LauncherHome : Fragment() {
val infoUpdate = Runnable { val infoUpdate = Runnable {
BLog.LOGE("swipeToDeleteCallback data called infoUpdate ")
chooseAdpater() chooseAdpater()
} }
@ -198,11 +198,8 @@ internal class LauncherHome : Fragment() {
var weatherPages = arrayListOf<Int>() var weatherPages = arrayListOf<Int>()
var weatherAdapter = arrayListOf<RecyclerView.Adapter<out RecyclerView.ViewHolder>?>() var weatherAdapter = arrayListOf<RecyclerView.Adapter<out RecyclerView.ViewHolder>?>()
PrefBoolean.weatherDress.get(false).letTrue { PrefBoolean.weatherDress.get(false).letTrue { weatherPages.add(R.layout.hourly_weather); weatherAdapter.add(weatherDressAdapter!!)}
weatherPages.add(R.layout.hourly_weather) PrefBoolean.weatherState.get(false).letTrue { weatherPages.add(R.layout.recommended_hourly_dress); weatherAdapter.add(weatherHourlyAdapter!!)}
weatherAdapter.add(weatherDressAdapter!!)}
PrefBoolean.weatherState.get(false).letTrue { weatherPages.add(R.layout.recommended_hourly_dress)
weatherAdapter.add(weatherHourlyAdapter!!)}
if (weatherPages.size > 0) { if (weatherPages.size > 0) {
mWeatherAdapter = WeatherAdapter( mWeatherAdapter = WeatherAdapter(
weatherPages, weatherPages,
@ -213,11 +210,6 @@ internal class LauncherHome : Fragment() {
} else { } else {
binding.noticeSummary.root.visibility = View.GONE binding.noticeSummary.root.visibility = View.GONE
} }
// mWeatherAdapter = WeatherAdapter(arrayListOf(),binding.noticeSummary)
// WorkersDb.getRealm().query<WeatherForcast>().first().find()?.forecast?.let {
// mWeatherAdapter?.update(it.forecastday)
// BLog.LOGE("saved weatherForcast >>> ${it.forecastday}")
// }
val decoration = DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) val decoration = DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
@ -543,11 +535,12 @@ internal class LauncherHome : Fragment() {
} }
infosJob?.start() infosJob?.start()
} }
var rssStateVote = false
fun queryVotes() { fun queryVotes() {
beforeQuery() beforeQuery()
var rQ = WorkersDb.getRealm().query<RssData>().query("vote == $0",true) var rQ = WorkersDb.getRealm().query<RssData>().query("vote == $0",true)
updateQuery(rQ) updateQuery(rQ)
rssStateVote = true
} }
fun queryInfos(filter: Collection<RssDataType>? = arrayListOf(RssDataType.GURU,RssDataType.MOST,RssDataType.REDDIT_NSFW), noLimit : Boolean = false) { fun queryInfos(filter: Collection<RssDataType>? = arrayListOf(RssDataType.GURU,RssDataType.MOST,RssDataType.REDDIT_NSFW), noLimit : Boolean = false) {
@ -559,6 +552,7 @@ internal class LauncherHome : Fragment() {
} }
updateQuery(rQ) updateQuery(rQ)
rssStateVote = false
} }
fun queryInfos(keyword : String, category : ArrayList<String> = arrayListOf(), noLimit : Boolean = false) { fun queryInfos(keyword : String, category : ArrayList<String> = arrayListOf(), noLimit : Boolean = false) {
@ -600,6 +594,7 @@ internal class LauncherHome : Fragment() {
rQ = rQ.query(queryString) rQ = rQ.query(queryString)
} }
updateQuery(rQ) updateQuery(rQ)
rssStateVote = false
} }
var infosJob : Job? = null var infosJob : Job? = null
@ -676,8 +671,11 @@ internal class LauncherHome : Fragment() {
} }
binding.otherCheck -> { binding.otherCheck -> {
if (binding.otherCheck.isSelected ) { if (binding.otherCheck.isSelected ) {
binding.otherCheck.isSelected = false if (rssStateVote) {
queryInfos()
} else {
binding.otherCheck.isSelected = false
}
} else { } else {
queryInfos() queryInfos()
binding.otherCheck.isSelected = true binding.otherCheck.isSelected = true
@ -850,22 +848,19 @@ internal class LauncherHome : Fragment() {
private fun enableSwipeToDeleteAndUndo() { private fun enableSwipeToDeleteAndUndo() {
val swipeToDeleteCallback: SwipeToDeleteCallback = object : SwipeToDeleteCallback(requireContext()) { val swipeToDeleteCallback: SwipeToDeleteCallback = object : SwipeToDeleteCallback(requireContext()) {
override fun onSwiped(@NonNull viewHolder: RecyclerView.ViewHolder, i: Int) { override fun onSwiped(@NonNull viewHolder: RecyclerView.ViewHolder, i: Int) {
BLog.LOGE("swipeToDeleteCallback start")
(viewHolder.itemView.getTag() as? RssData)?.let { rss -> (viewHolder.itemView.getTag() as? RssData)?.let { rss ->
WorkersDb.getRealm().apply { WorkersDb.getRealm().apply {
writeBlocking { writeBlocking {
if (rss.vote) { if (rssStateVote && rss.vote) {
rss.vote = false rss.vote = false
rss.read = 0 rss.read = 0
} else { } else {
rss.read += nomoreShowCount rss.read += nomoreShowCount
} }
copyToRealm(rss, UpdatePolicy.ALL) copyToRealm(rss, UpdatePolicy.ALL)
BLog.LOGE("swipeToDeleteCallback data update ")
} }
} }
} }
BLog.LOGE("swipeToDeleteCallback endEvent")
} }
} }
@ -916,6 +911,9 @@ internal class LauncherHome : Fragment() {
gestureDistance: Double gestureDistance: Double
): Boolean { ): Boolean {
when(fingers) { when(fingers) {
4->{
lActivity!!.startActivity(Intent(requireContext(), Behavior::class.java))
}
3 -> QuickAccess().show(fragManager, BOTTOM_SHEET_TAG) 3 -> QuickAccess().show(fragManager, BOTTOM_SHEET_TAG)
2->{ 2->{
var startIntene = Intent(Intent.ACTION_MAIN) var startIntene = Intent(Intent.ACTION_MAIN)

View File

@ -158,8 +158,6 @@ internal class RssItemAdapter (
fun updateData(newList: List<RssDataInterface>) { fun updateData(newList: List<RssDataInterface>) {
try { try {
BLog.LOGE("swipeToDeleteCallback data called updateData ${newList} ")
// BLog.LOGE("newList >> ${newList}")
DiffUtil.calculateDiff(RssItemDiffUtil(rssDataItemLis, newList)).apply { DiffUtil.calculateDiff(RssItemDiffUtil(rssDataItemLis, newList)).apply {
}.dispatchUpdatesTo(this).apply { }.dispatchUpdatesTo(this).apply {

View File

@ -27,7 +27,7 @@ abstract class SwipeToDeleteCallback internal constructor(context: Context) :
init { init {
mClearPaint.setXfermode(PorterDuffXfermode(PorterDuff.Mode.CLEAR)) mClearPaint.setXfermode(PorterDuffXfermode(PorterDuff.Mode.DARKEN))
deleteDrawable = ContextCompat.getDrawable(mContext, R.drawable.ic_delete) deleteDrawable = ContextCompat.getDrawable(mContext, R.drawable.ic_delete)
intrinsicWidth = deleteDrawable!!.intrinsicWidth intrinsicWidth = deleteDrawable!!.intrinsicWidth
intrinsicHeight = deleteDrawable.intrinsicHeight intrinsicHeight = deleteDrawable.intrinsicHeight

View File

@ -16,6 +16,7 @@ import android.text.style.ClickableSpan
import android.util.AttributeSet import android.util.AttributeSet
import android.view.View import android.view.View
import androidx.appcompat.widget.AppCompatTextView import androidx.appcompat.widget.AppCompatTextView
import bums.lunatic.launcher.R
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.Date import java.util.Date
@ -77,12 +78,12 @@ class DateTimeView : AppCompatTextView {
} }
spannableBuilder.append(time) spannableBuilder.append(time)
spannableBuilder.setSpan(AbsoluteSizeSpan(48,true), 0, time.length , Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) spannableBuilder.setSpan(AbsoluteSizeSpan(resources.getDimensionPixelSize(R.dimen._26sp),false), 0, time.length , Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
spannableBuilder.setSpan(mClickableSpan, 0, time.length , Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) spannableBuilder.setSpan(mClickableSpan, 0, time.length , Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
spannableBuilder.append("\n") spannableBuilder.append("\n")
spannableBuilder.append(date) spannableBuilder.append(date)
var start = time.length + "\n".length var start = time.length + "\n".length
spannableBuilder.setSpan(AbsoluteSizeSpan(30,true), start , start+date.length , Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) spannableBuilder.setSpan(AbsoluteSizeSpan(resources.getDimensionPixelSize(R.dimen._20sp),false), start , start+date.length , Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
spannableBuilder.setSpan(mClickableSpan2, start , start+date.length , Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) spannableBuilder.setSpan(mClickableSpan2, start , start+date.length , Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
mHandler.removeCallbacks(runable) mHandler.removeCallbacks(runable)
setText(spannableBuilder) setText(spannableBuilder)

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_longAnimTime"
android:fromAlpha="0.0"
android:interpolator="@android:anim/accelerate_interpolator"
android:toAlpha="1.0" />

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_longAnimTime"
android:fromAlpha="1.0"
android:interpolator="@android:anim/accelerate_interpolator"
android:toAlpha="0.0" />

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:topLeftRadius="30dp" />
<solid android:color="#fff" />
</shape>

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size
android:width="30dp"
android:height="30dp" />
<solid android:color="@color/purple_500" />
</shape>

View File

@ -14,7 +14,7 @@
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_margin="10dp" android:layout_margin="@dimen/default_layout_margin"
android:layout_height="0dp"> android:layout_height="0dp">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:orientation="vertical" android:orientation="vertical"
@ -207,7 +207,7 @@
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
android:background="@drawable/base_bg" android:background="@drawable/base_bg"
android:layout_margin="10dp" android:layout_margin="@dimen/default_layout_margin"
android:id="@+id/searchInput" android:id="@+id/searchInput"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="50dp" android:layout_height="50dp"

View File

@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffbe00"
android:fitsSystemWindows="true"
tools:context=".behavior.Behavior">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar_layout"
android:layout_width="match_parent"
android:layout_height="@dimen/appbar_height"
app:elevation="0dp">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffbe00"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<androidx.appcompat.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="@dimen/toolbar_height"
app:contentInsetStart="0dp"
app:layout_collapseMode="pin">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv_back"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_margin="15dp"
android:src="@drawable/ic_up" />
<Space
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" />
<ImageView
android:id="@+id/iv_del"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_margin="15dp"
android:src="@drawable/ic_delete" />
<ImageView
android:id="@+id/iv_share"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_margin="15dp"
android:src="@drawable/ic_link" />
</LinearLayout>
</androidx.appcompat.widget.Toolbar>
<androidx.recyclerview.widget.RecyclerView
android:layout_gravity="bottom|center_horizontal"
android:id="@+id/calendarDateView"
android:background="#ddd000"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
android:orientation="vertical"
app:spanCount="7"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_list_main"
android:clipToPadding="false"
android:orientation="vertical"
android:layout_marginTop="5dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:listitem="@layout/item_sample" />
<!-- ball -->
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/drawable_ball"
app:layout_behavior="bums.lunatic.launcher.behavior.behaviorimpl.BehaviorTopBall" />
<!-- blackjin -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="BlackJin"
android:textColor="@color/black"
android:textSize="45sp"
android:textStyle="bold"
app:layout_behavior="bums.lunatic.launcher.behavior.behaviorimpl.BehaviorBlackJin" />
<!-- tistory -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tistory"
android:textColor="@color/white"
android:textSize="22sp"
android:textStyle="bold"
app:layout_behavior="bums.lunatic.launcher.behavior.behaviorimpl.BehaviorTistory" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -12,7 +12,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:singleSelection="true" app:singleSelection="true"
android:layout_margin="10dp" android:layout_margin="@dimen/default_layout_margin"
> >
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/expandRss" android:id="@+id/expandRss"
@ -43,7 +43,7 @@
android:id="@+id/explayer" android:id="@+id/explayer"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="10dp"> android:layout_margin="@dimen/default_layout_margin">
<include <include
android:id="@+id/feedsRss" android:id="@+id/feedsRss"
android:background="@drawable/base_bg" android:background="@drawable/base_bg"
@ -60,7 +60,7 @@
<ScrollView <ScrollView
app:layout_constraintTop_toBottomOf="@id/explayer" app:layout_constraintTop_toBottomOf="@id/explayer"
android:layout_margin="10dp" android:layout_margin="@dimen/default_layout_margin"
android:background="@drawable/base_bg" android:background="@drawable/base_bg"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"

View File

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/day"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="날짜"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
<TextView
android:id="@+id/text_plus"
android:layout_width="10dp"
android:layout_height="wrap_content"
android:gravity="center"
android:text="+"
android:textColor="#ff0000"
app:layout_constraintTop_toBottomOf="@id/day"
app:layout_constraintStart_toStartOf="parent"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="당일소득"
android:textColor="#ff0000"
app:layout_constraintTop_toTopOf="@id/text_plus"
app:layout_constraintStart_toEndOf="@id/text_plus"
app:layout_constraintBottom_toBottomOf="@id/text_plus"/>
<TextView
android:id="@+id/text_minus"
android:layout_width="10dp"
android:layout_height="wrap_content"
android:gravity="center"
android:text="-"
android:textColor="#0000ff"
app:layout_constraintTop_toBottomOf="@id/text_plus"
app:layout_constraintStart_toStartOf="parent"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="당일지출"
android:textColor="#0000ff"
app:layout_constraintTop_toTopOf="@id/text_minus"
app:layout_constraintStart_toEndOf="@id/text_minus"
app:layout_constraintBottom_toBottomOf="@id/text_minus"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -3,55 +3,75 @@
<data> <data>
<variable name="info" type="bums.lunatic.launcher.model.ShowingWeatherInfo"/> <variable name="info" type="bums.lunatic.launcher.model.ShowingWeatherInfo"/>
</data> </data>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="80dp" android:layout_width="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:orientation="vertical"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:gravity="center"> android:gravity="center">
<TextView <TextView
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
style="@style/normal"
app:layout_constraintTop_toTopOf="parent"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:id="@+id/amOrPm" android:id="@+id/amOrPm"
android:gravity="center" android:gravity="center"
android:text="@{info.amOrPm}" android:text="@{info.amOrPm}"
android:fontFamily="sans-serif-medium" />
android:textSize="14sp" />
<TextView <TextView
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/amOrPm"
style="@style/normal"
android:layout_width="50dp" android:layout_width="50dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:id="@+id/hour" android:id="@+id/hour"
android:background="@drawable/date_bg" android:background="@drawable/date_bg"
android:fontFamily="sans-serif-medium"
android:gravity="center" android:gravity="center"
android:textSize="14sp"
android:text="@{info.textHour}" android:text="@{info.textHour}"
android:textAlignment="center"/> android:textAlignment="center"/>
<ImageView <ImageView
android:padding="8dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@id/hour"
android:id="@+id/imgWeather" android:id="@+id/imgWeather"
android:layout_width="40dp" android:layout_width="70dp"
android:scaleType="fitCenter"
android:adjustViewBounds="true"
android:src="@drawable/level_dress_img" android:src="@drawable/level_dress_img"
android:layout_height="40dp" android:layout_height="wrap_content"
android:contentDescription="온도별 옷차림" android:contentDescription="온도별 옷차림"
app:tint="@android:color/white"/> app:tint="@android:color/white"/>
<TextView <TextView
app:layout_constraintBottom_toBottomOf="@id/imgWeather"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:includeFontPadding="false"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:id="@+id/textDress" android:id="@+id/textDress"
android:fontFamily="sans-serif-light" style="@style/small"
android:textSize="11sp"
android:text="@{info.textCondition}" android:text="@{info.textCondition}"
android:gravity="center" android:gravity="center"
android:textAlignment="center"/> android:textAlignment="center"/>
<TextView <TextView
app:layout_constraintTop_toBottomOf="@id/textDress"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
style="@style/normal"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:id="@+id/temperature" android:id="@+id/temperature"
android:textColor="@android:color/white"
android:text="@{info.temp}" android:text="@{info.temp}"
android:fontFamily="sans-serif-medium" android:fontFamily="sans-serif-medium"
android:textSize="14sp"
android:gravity="center" android:gravity="center"
android:textAlignment="center"/> android:textAlignment="center"/>
</LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</layout> </layout>

View File

@ -12,21 +12,24 @@
android:id="@+id/weather_item"> android:id="@+id/weather_item">
<TextView <TextView
style="@style/normal"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:id="@+id/amOrPm" android:id="@+id/amOrPm"
android:gravity="center" android:gravity="center"
android:text="@{info.amOrPm}" android:text="@{info.amOrPm}"
android:fontFamily="sans-serif-medium" android:fontFamily="sans-serif-medium"
android:textSize="14sp" />
/>
<TextView <TextView
style="@style/normal"
android:layout_width="50dp" android:layout_width="50dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:id="@+id/hour" android:id="@+id/hour"
android:background="@drawable/date_bg" android:background="@drawable/date_bg"
android:fontFamily="sans-serif-medium" android:fontFamily="sans-serif-medium"
android:gravity="center" android:gravity="center"
android:textSize="14sp"
android:text="@{info.textHour}" android:text="@{info.textHour}"
android:textAlignment="center"/> android:textAlignment="center"/>
<ImageView <ImageView
@ -40,18 +43,18 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:id="@+id/textDress" android:id="@+id/textDress"
android:fontFamily="sans-serif-light" style="@style/small"
android:textSize="11sp"
android:text="@{info.dress}" android:text="@{info.dress}"
android:gravity="center" android:gravity="center"
android:textAlignment="center"/> android:textAlignment="center"/>
<TextView <TextView
style="@style/normal"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:id="@+id/temperature" android:id="@+id/temperature"
android:textColor="@android:color/white"
android:text="@{info.temp}" android:text="@{info.temp}"
android:fontFamily="sans-serif-medium" android:fontFamily="sans-serif-medium"
android:textSize="14sp"
android:gravity="center" android:gravity="center"
android:textAlignment="center"/> android:textAlignment="center"/>
</LinearLayout> </LinearLayout>

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="100dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="SAMPLE"
android:textColor="@color/black"
android:textSize="20sp"
android:textStyle="bold" />
</FrameLayout>

View File

@ -8,7 +8,7 @@
android:fitsSystemWindows="true"> android:fitsSystemWindows="true">
<WebView <WebView
android:layout_margin="10dp" android:layout_margin="@dimen/default_layout_margin"
android:id="@+id/searcher_01" android:id="@+id/searcher_01"
android:layout_width="match_parent" android:layout_width="match_parent"
android:alpha="0" android:alpha="0"

View File

@ -13,16 +13,15 @@
android:id="@+id/batteryProgress" android:id="@+id/batteryProgress"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/twelve" android:layout_margin="@dimen/default_layout_margin"
android:layout_marginRight="12dp"
android:indeterminate="false" android:indeterminate="false"
android:textSize="18sp" style="@style/normal"
android:text="빠떼뤼 ~> 0%" android:text="빠떼뤼 ~> 0%"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<bums.lunatic.launcher.view.DateTimeView <bums.lunatic.launcher.view.DateTimeView
android:layout_margin="10dp" android:layout_margin="@dimen/default_layout_margin"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/base_bg" android:background="@drawable/base_bg"
@ -32,7 +31,6 @@
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/batteryProgress" app:layout_constraintTop_toBottomOf="@+id/batteryProgress"
android:textSize="16sp"
tools:ignore="MissingConstraints" /> tools:ignore="MissingConstraints" />
<ImageView <ImageView
@ -42,17 +40,14 @@
app:layout_constraintTop_toTopOf="@id/time" app:layout_constraintTop_toTopOf="@id/time"
app:layout_constraintBottom_toBottomOf="@id/time" app:layout_constraintBottom_toBottomOf="@id/time"
android:layout_width="40dp" android:layout_width="40dp"
android:layout_margin="5dp" android:layout_margin="@dimen/default_layout_margin"
android:layout_height="40dp"/> android:layout_height="40dp"/>
<bums.lunatic.launcher.view.CircleImageView <bums.lunatic.launcher.view.CircleImageView
app:layout_constraintLeft_toLeftOf="@id/time" app:layout_constraintLeft_toLeftOf="@id/time"
app:layout_constraintTop_toTopOf="@id/time" app:layout_constraintTop_toTopOf="@id/time"
app:layout_constraintBottom_toBottomOf="@id/time" app:layout_constraintBottom_toBottomOf="@id/time"
android:layout_marginTop="2.5dp" android:layout_margin="@dimen/default_layout_margin"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginBottom="2.5dp"
android:adjustViewBounds="true" android:adjustViewBounds="true"
android:scaleType="fitCenter" android:scaleType="fitCenter"
android:background="@null" android:background="@null"
@ -60,32 +55,33 @@
app:civ_border_width="1dp" app:civ_border_width="1dp"
app:civ_border_color="#000000" app:civ_border_color="#000000"
app:civ_label="택시" app:civ_label="택시"
android:layout_margin="5dp"
android:visibility="gone" android:visibility="gone"
android:layout_height="0dp" android:layout_height="0dp"
android:src="@drawable/kakaot" android:src="@drawable/kakaot"
android:id="@+id/alchol_katalkT"/> android:id="@+id/alchol_katalkT"/>
<com.google.android.material.textview.MaterialTextView <!-- <com.google.android.material.textview.MaterialTextView-->
android:id="@+id/weather" <!-- android:id="@+id/weather"-->
android:layout_width="wrap_content" <!-- app:layout_goneMarginBottom="0dp"-->
android:layout_height="wrap_content" <!-- android:layout_width="wrap_content"-->
android:gravity="center" <!-- android:layout_height="wrap_content"-->
android:maxLines="1" <!-- android:gravity="center"-->
android:textIsSelectable="false" <!-- android:maxLines="1"-->
app:layout_constraintLeft_toLeftOf="parent" <!-- android:textIsSelectable="false"-->
app:layout_constraintRight_toRightOf="parent" <!-- app:layout_constraintLeft_toLeftOf="parent"-->
app:layout_constraintTop_toBottomOf="@+id/time" <!-- app:layout_constraintRight_toRightOf="parent"-->
/> <!-- app:layout_constraintTop_toBottomOf="@+id/time"-->
<!-- />-->
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/current_music" android:id="@+id/current_music"
app:layout_constraintTop_toBottomOf="@id/weather" app:layout_constraintTop_toBottomOf="@id/time"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
android:background="@drawable/base_bg" android:background="@drawable/base_bg"
android:layout_margin="10dp" android:layout_margin="@dimen/default_layout_margin"
android:padding="5dp" app:layout_goneMarginTop="0dp"
app:layout_goneMarginBottom="0dp"
android:padding="@dimen/default_padding"
android:visibility="gone" android:visibility="gone"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent"
android:layout_width="match_parent" android:layout_width="match_parent"
@ -130,9 +126,9 @@
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<include <include
android:layout_margin="@dimen/default_layout_margin"
android:id="@+id/noticeSummary" android:id="@+id/noticeSummary"
layout="@layout/weather_book" layout="@layout/weather_book"
android:layout_margin="10dp"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/current_music" app:layout_constraintTop_toBottomOf="@id/current_music"
@ -141,8 +137,7 @@
<LinearLayout <LinearLayout
android:layout_margin="10dp" android:layout_margin="@dimen/default_layout_margin"
android:layout_marginTop="20dp"
android:id="@+id/summaryChoose" android:id="@+id/summaryChoose"
android:layout_width="0dp" android:layout_width="0dp"
android:gravity="center" android:gravity="center"
@ -155,6 +150,7 @@
> >
<TextView <TextView
style="@style/normal"
android:id="@+id/missedCalls" android:id="@+id/missedCalls"
android:gravity="center" android:gravity="center"
android:textColor="@color/tabs" android:textColor="@color/tabs"
@ -166,6 +162,7 @@
android:layout_height="wrap_content"/> android:layout_height="wrap_content"/>
<TextView <TextView
style="@style/normal"
android:id="@+id/otherCheck" android:id="@+id/otherCheck"
android:gravity="center" android:gravity="center"
android:background="@null" android:background="@null"
@ -177,6 +174,7 @@
android:layout_height="wrap_content"/> android:layout_height="wrap_content"/>
<TextView <TextView
style="@style/normal"
android:id="@+id/recentSms" android:id="@+id/recentSms"
android:gravity="center" android:gravity="center"
android:background="@null" android:background="@null"
@ -188,6 +186,7 @@
android:layout_height="wrap_content"/> android:layout_height="wrap_content"/>
<TextView <TextView
style="@style/normal"
android:id="@+id/notice" android:id="@+id/notice"
android:gravity="center" android:gravity="center"
android:background="@null" android:background="@null"
@ -207,12 +206,12 @@
> >
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:layout_margin="10dp" android:layout_margin="@dimen/default_layout_margin"
android:id="@+id/mainList" android:id="@+id/mainList"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="0dp" android:layout_height="0dp"
android:overScrollMode="never" android:overScrollMode="never"
android:padding="5dp" android:padding="@dimen/default_padding"
android:visibility="gone" android:visibility="gone"
android:background="@drawable/base_bg" android:background="@drawable/base_bg"
android:scrollbars="none" android:scrollbars="none"
@ -222,12 +221,12 @@
android:layout_alignParentBottom="true" android:layout_alignParentBottom="true"
/> />
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:layout_margin="10dp" android:layout_margin="@dimen/default_layout_margin"
android:id="@+id/smsList" android:id="@+id/smsList"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="0dp" android:layout_height="0dp"
android:overScrollMode="never" android:overScrollMode="never"
android:padding="5dp" android:padding="@dimen/default_padding"
android:scrollbars="none" android:scrollbars="none"
android:visibility="gone" android:visibility="gone"
android:background="@drawable/base_bg" android:background="@drawable/base_bg"
@ -239,12 +238,12 @@
/> />
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:layout_margin="10dp" android:layout_margin="@dimen/default_layout_margin"
android:id="@+id/infoList" android:id="@+id/infoList"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="0dp" android:layout_height="0dp"
android:overScrollMode="never" android:overScrollMode="never"
android:padding="5dp" android:padding="@dimen/default_padding"
android:scrollbars="none" android:scrollbars="none"
android:visibility="gone" android:visibility="gone"
android:background="@drawable/base_bg" android:background="@drawable/base_bg"
@ -256,12 +255,12 @@
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:layout_margin="10dp" android:layout_margin="@dimen/default_layout_margin"
android:id="@+id/notiList" android:id="@+id/notiList"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="0dp" android:layout_height="0dp"
android:overScrollMode="never" android:overScrollMode="never"
android:padding="5dp" android:padding="@dimen/default_padding"
android:scrollbars="none" android:scrollbars="none"
android:visibility="gone" android:visibility="gone"
android:background="@drawable/base_bg" android:background="@drawable/base_bg"
@ -274,16 +273,18 @@
</RelativeLayout> </RelativeLayout>
<androidx.appcompat.widget.LinearLayoutCompat <androidx.appcompat.widget.LinearLayoutCompat
android:layout_margin="10dp" android:layout_margin="@dimen/default_layout_margin"
android:id="@+id/favAppsGroup" android:id="@+id/favAppsGroup"
android:layout_width="@dimen/zero" android:layout_width="@dimen/zero"
android:layout_height="60dp" android:layout_height="40dp"
android:layout_marginTop="@dimen/twentyTwo" android:layout_marginTop="@dimen/twentyTwo"
android:layout_marginBottom="@dimen/twelve" android:layout_marginBottom="@dimen/twelve"
android:background="@drawable/base_bg" android:background="@drawable/base_bg"
android:orientation="horizontal" android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent" /> app:layout_constraintBottom_toBottomOf="parent" >
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -21,10 +21,9 @@
android:id="@+id/title" android:id="@+id/title"
android:layout_width="@dimen/zero" android:layout_width="@dimen/zero"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textSize="24sp" style="@style/normal"
android:maxLines="2" android:maxLines="2"
android:gravity="center_vertical|right" android:gravity="center_vertical|right"
android:includeFontPadding="false"
android:ellipsize="middle" android:ellipsize="middle"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toRightOf="@id/circle_preview" app:layout_constraintLeft_toRightOf="@id/circle_preview"
@ -34,9 +33,8 @@
android:id="@+id/desc" android:id="@+id/desc"
android:layout_width="@dimen/zero" android:layout_width="@dimen/zero"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textSize="16sp" style="@style/small"
android:maxLines="2" android:maxLines="2"
android:includeFontPadding="false"
android:gravity="center_vertical|right" android:gravity="center_vertical|right"
android:ellipsize="middle" android:ellipsize="middle"
app:layout_constraintTop_toBottomOf="@id/title" app:layout_constraintTop_toBottomOf="@id/title"
@ -48,10 +46,9 @@
android:id="@+id/date" android:id="@+id/date"
android:layout_width="@dimen/zero" android:layout_width="@dimen/zero"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textSize="16sp" style="@style/small"
android:lines="1" android:lines="1"
android:gravity="center_vertical|right" android:gravity="center_vertical|right"
android:includeFontPadding="false"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toRightOf="@id/circle_preview" app:layout_constraintLeft_toRightOf="@id/circle_preview"
app:layout_constraintRight_toRightOf="parent"/> app:layout_constraintRight_toRightOf="parent"/>

View File

@ -6,60 +6,56 @@
<variable name="textLocation" type="String"/> <variable name="textLocation" type="String"/>
</data> </data>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:padding="@dimen/default_padding"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="0dp">
android:textAlignment="center"> <ImageView
<androidx.constraintlayout.widget.ConstraintLayout android:adjustViewBounds="true"
android:layout_width="match_parent" android:padding="0dp"
android:id="@+id/imageView"
android:layout_width="25dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent" android:contentDescription="시계 아이콘"
android:id="@+id/header" app:srcCompat="@drawable/ico_time"
android:paddingVertical="5dp"> tools:ignore="ImageContrastCheck"
<ImageView android:layout_marginStart="@dimen/default_layout_margin"
android:id="@+id/imageView" app:tint="@android:color/white"
android:layout_width="25dp" app:layout_constraintLeft_toLeftOf="parent"
android:layout_height="25dp" app:layout_constraintTop_toTopOf="parent" />
android:contentDescription="시계 아이콘"
app:srcCompat="@drawable/ico_time" <TextView
tools:ignore="ImageContrastCheck" android:id="@+id/textView2"
android:layout_marginLeft="20dp" android:layout_width="0dp"
app:tint="@android:color/white" android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="@dimen/default_layout_margin"
app:layout_constraintEnd_toStartOf="@+id/textView2" android:fontFamily="sans-serif-medium"
app:layout_constraintTop_toTopOf="parent" android:gravity="left|center_vertical"
app:layout_constraintBottom_toBottomOf="parent"/> android:text="시간별 예보"
<TextView android:textColor="@android:color/white"
android:id="@+id/textView2" android:textSize="@dimen/_14sp"
android:layout_width="0dp" app:layout_constraintBottom_toBottomOf="@id/imageView"
android:layout_height="wrap_content" app:layout_constraintEnd_toStartOf="@id/textViewLocation"
android:fontFamily="sans-serif-medium" app:layout_constraintStart_toEndOf="@id/imageView"
android:text="시간별 예보" app:layout_constraintTop_toTopOf="@id/imageView" />
android:gravity="left"
android:textSize="14sp" <TextView
android:layout_marginLeft="10dp" android:id="@+id/textViewLocation"
app:layout_constraintStart_toEndOf="@id/imageView" android:layout_width="wrap_content"
app:layout_constraintEnd_toStartOf="@id/textViewLocation" android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent" android:fontFamily="sans-serif-medium"
app:layout_constraintBottom_toBottomOf="parent" android:text="@{textLocation}"
app:layout_constraintWidth_default="spread"/> android:textColor="@android:color/white"
<TextView android:gravity="center_vertical|right"
android:id="@+id/textViewLocation" android:textSize="@dimen/_12sp"
android:layout_width="wrap_content" android:layout_marginEnd="@dimen/default_layout_margin"
android:layout_height="wrap_content" app:layout_constraintRight_toRightOf="parent"
android:fontFamily="sans-serif-medium" app:layout_constraintTop_toTopOf="@id/imageView"
android:text="@{textLocation}" app:layout_constraintBottom_toBottomOf="@id/imageView"/>
android:textAlignment="center"
android:textSize="11sp"
android:layout_marginRight="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.viewpager2.widget.ViewPager2 <androidx.viewpager2.widget.ViewPager2
android:id="@+id/weatherViewPager" android:id="@+id/weatherViewPager"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="130dp" android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/header" app:layout_constraintTop_toBottomOf="@+id/imageView" />
app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</layout> </layout>

View File

@ -1,11 +1,17 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<declare-styleable name="CircleImageView"> <declare-styleable name="CircleImageView">
<attr name="civ_border_width" format="dimension" /> <attr name="civ_border_width" format="dimension" />
<attr name="civ_border_color" format="color" /> <attr name="civ_border_color" format="color" />
<attr name="civ_border_overlay" format="boolean" /> <attr name="civ_border_overlay" format="boolean" />
<attr name="civ_circle_background_color" format="color" /> <attr name="civ_circle_background_color" format="color" />
<attr name="civ_label" format="string" /> <attr name="civ_label" format="string" />
<attr name="civ_ts" format="dimension" /> <attr name="civ_ts" format="dimension" />
</declare-styleable> </declare-styleable>
<attr name="cbd_calendar_row" format="integer"/>
<declare-styleable name="CalendarDateView">
<attr name="cbd_calendar_row"/>
</declare-styleable>
</resources> </resources>

View File

@ -7,4 +7,14 @@
<color name="red">#FFFF0000</color> <color name="red">#FFFF0000</color>
<color name="green">#FF00FF00</color> <color name="green">#FF00FF00</color>
<color name="blue">#FF0000FF</color> <color name="blue">#FF0000FF</color>
<color name="purple_200">#FFBB86FC</color>
<color name="purple_500">#FF6200EE</color>
<color name="purple_700">#FF3700B3</color>
<color name="teal_200">#FF03DAC5</color>
<color name="teal_700">#FF018786</color>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
</resources> </resources>

View File

@ -20,4 +20,19 @@
<dimen name="normalText">16sp</dimen> <dimen name="normalText">16sp</dimen>
<dimen name="clockText">48sp</dimen> <dimen name="clockText">48sp</dimen>
<dimen name="appsCountText">216sp</dimen> <dimen name="appsCountText">216sp</dimen>
<dimen name="default_layout_margin">7dp</dimen>
<dimen name="default_padding">5dp</dimen>
<dimen name="_26sp">28sp</dimen>
<dimen name="_20sp">23sp</dimen>
<dimen name="_14sp">17sp</dimen>
<dimen name="_12sp">14sp</dimen>
<!-- toolbar height -->
<dimen name="toolbar_height">100dp</dimen>
<!-- appbar height -->
<dimen name="appbar_height">329dp</dimen>
</resources> </resources>

View File

@ -70,5 +70,22 @@
<item name="android:layout_weight">1</item> <item name="android:layout_weight">1</item>
</style> </style>
<style name="defaultTextView">
<item name="android:includeFontPadding">false</item>
<item name="android:textColor">@android:color/white</item>
</style>
<style name="normal" parent="defaultTextView">
<item name="android:includeFontPadding">false</item>
<item name="android:textSize">@dimen/_14sp</item>
<item name="fontFamily">sans-serif-medium</item>
</style>
<style name="small" parent="defaultTextView">
<item name="android:includeFontPadding">false</item>
<item name="android:textSize">@dimen/_12sp</item>
<item name="fontFamily">sans-serif-light</item>
</style>
</resources> </resources>