Mercurial > dwindows
comparison android/DWindows.kt @ 2650:7101b5692601
Android: Attempt at implementing splitbar using ConstraintLayout.
Getting errors with the layout with HandyFTP, but I need to switch locations...
so committing unfinished.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Tue, 14 Sep 2021 05:53:51 +0000 |
parents | 28ca1e59e76f |
children | 7700c8022af3 |
comparison
equal
deleted
inserted
replaced
2649:76d876c441c9 | 2650:7101b5692601 |
---|---|
40 import android.widget.SeekBar.OnSeekBarChangeListener | 40 import android.widget.SeekBar.OnSeekBarChangeListener |
41 import androidx.appcompat.app.AlertDialog | 41 import androidx.appcompat.app.AlertDialog |
42 import androidx.appcompat.app.AppCompatActivity | 42 import androidx.appcompat.app.AppCompatActivity |
43 import androidx.appcompat.widget.AppCompatEditText | 43 import androidx.appcompat.widget.AppCompatEditText |
44 import androidx.collection.SimpleArrayMap | 44 import androidx.collection.SimpleArrayMap |
45 import androidx.constraintlayout.widget.ConstraintLayout | |
46 import androidx.constraintlayout.widget.ConstraintSet | |
45 import androidx.core.app.NotificationCompat | 47 import androidx.core.app.NotificationCompat |
46 import androidx.core.app.NotificationManagerCompat | 48 import androidx.core.app.NotificationManagerCompat |
47 import androidx.core.content.res.ResourcesCompat | 49 import androidx.core.content.res.ResourcesCompat |
48 import androidx.core.view.MenuCompat | 50 import androidx.core.view.MenuCompat |
49 import androidx.recyclerview.widget.RecyclerView | 51 import androidx.recyclerview.widget.RecyclerView |
1970 val adapter: DWTabViewPagerAdapter = pager.adapter as DWTabViewPagerAdapter | 1972 val adapter: DWTabViewPagerAdapter = pager.adapter as DWTabViewPagerAdapter |
1971 val index = adapter.pageList.indexOf(pageID) | 1973 val index = adapter.pageList.indexOf(pageID) |
1972 val tab = tabs.getTabAt(index) | 1974 val tab = tabs.getTabAt(index) |
1973 | 1975 |
1974 tabs.selectTab(tab) | 1976 tabs.selectTab(tab) |
1977 } | |
1978 } | |
1979 } | |
1980 | |
1981 fun splitBarNew(type: Int, topleft: View?, bottomright: View?, cid: Int): ConstraintLayout? | |
1982 { | |
1983 var splitbar: ConstraintLayout? = null | |
1984 | |
1985 waitOnUiThread { | |
1986 splitbar = ConstraintLayout(this) | |
1987 | |
1988 if(splitbar != null) { | |
1989 val constraintSet = ConstraintSet() | |
1990 constraintSet.clone(splitbar) | |
1991 | |
1992 splitbar!!.id = cid | |
1993 | |
1994 // Place the top/left item | |
1995 if(topleft != null) { | |
1996 if(topleft.id == 0) { | |
1997 topleft.id = View.generateViewId() | |
1998 } | |
1999 splitbar!!.addView(topleft) | |
2000 constraintSet.connect( | |
2001 topleft.id, | |
2002 ConstraintLayout.LayoutParams.TOP, | |
2003 ConstraintLayout.LayoutParams.PARENT_ID, | |
2004 ConstraintLayout.LayoutParams.TOP | |
2005 ) | |
2006 constraintSet.connect( | |
2007 topleft.id, | |
2008 ConstraintLayout.LayoutParams.LEFT, | |
2009 ConstraintLayout.LayoutParams.PARENT_ID, | |
2010 ConstraintLayout.LayoutParams.LEFT | |
2011 ) | |
2012 | |
2013 if (type == 0) { | |
2014 // Horizontal | |
2015 constraintSet.connect( | |
2016 topleft.id, | |
2017 ConstraintLayout.LayoutParams.BOTTOM, | |
2018 ConstraintLayout.LayoutParams.PARENT_ID, | |
2019 ConstraintLayout.LayoutParams.BOTTOM | |
2020 ) | |
2021 constraintSet.constrainPercentWidth(topleft.id, 0.5F) | |
2022 } else { | |
2023 // Vertical | |
2024 constraintSet.connect( | |
2025 topleft.id, | |
2026 ConstraintLayout.LayoutParams.RIGHT, | |
2027 ConstraintLayout.LayoutParams.PARENT_ID, | |
2028 ConstraintLayout.LayoutParams.RIGHT | |
2029 ) | |
2030 constraintSet.constrainPercentHeight(topleft.id, 0.5F) | |
2031 } | |
2032 } | |
2033 | |
2034 // Place the bottom/right item | |
2035 if(bottomright != null) { | |
2036 if (bottomright.id == 0) { | |
2037 bottomright.id = View.generateViewId() | |
2038 } | |
2039 splitbar!!.addView(bottomright) | |
2040 constraintSet.connect( | |
2041 bottomright.id, | |
2042 ConstraintLayout.LayoutParams.BOTTOM, | |
2043 ConstraintLayout.LayoutParams.PARENT_ID, | |
2044 ConstraintLayout.LayoutParams.BOTTOM | |
2045 ) | |
2046 constraintSet.connect( | |
2047 bottomright.id, | |
2048 ConstraintLayout.LayoutParams.RIGHT, | |
2049 ConstraintLayout.LayoutParams.PARENT_ID, | |
2050 ConstraintLayout.LayoutParams.RIGHT | |
2051 ) | |
2052 | |
2053 if (type == 0) { | |
2054 // Horizontal | |
2055 constraintSet.connect( | |
2056 bottomright.id, | |
2057 ConstraintLayout.LayoutParams.TOP, | |
2058 ConstraintLayout.LayoutParams.PARENT_ID, | |
2059 ConstraintLayout.LayoutParams.TOP | |
2060 ) | |
2061 constraintSet.constrainPercentWidth(bottomright.id, 0.5F) | |
2062 } else { | |
2063 // Vertical | |
2064 constraintSet.connect( | |
2065 bottomright.id, | |
2066 ConstraintLayout.LayoutParams.LEFT, | |
2067 ConstraintLayout.LayoutParams.PARENT_ID, | |
2068 ConstraintLayout.LayoutParams.LEFT | |
2069 ) | |
2070 constraintSet.constrainPercentHeight(bottomright.id, 0.5F) | |
2071 } | |
2072 } | |
2073 | |
2074 // finally, apply the constraint set to layout | |
2075 constraintSet.applyTo(splitbar) | |
2076 } | |
2077 } | |
2078 return splitbar | |
2079 } | |
2080 | |
2081 fun splitBarGet(splitbar: ConstraintLayout): Float { | |
2082 var position: Float = 50.0F | |
2083 | |
2084 waitOnUiThread { | |
2085 val topleft: View? = splitbar.getChildAt(0) | |
2086 val bottomright: View? = splitbar.getChildAt(1) | |
2087 | |
2088 if(splitbar.width > 0 && splitbar.height > 0) { | |
2089 if (topleft != null) { | |
2090 if (splitbar.width == topleft.width) { | |
2091 position = (topleft.height / splitbar.height) * 100.0F | |
2092 } else { | |
2093 position = (topleft.width / splitbar.width) * 100.0F | |
2094 } | |
2095 } else if (bottomright != null) { | |
2096 if (splitbar.width == bottomright.width) { | |
2097 position = 100.0F - ((bottomright.height / splitbar.height) * 100.0F) | |
2098 } else { | |
2099 position = 100.0F - ((bottomright.width / splitbar.width) * 100.0F) | |
2100 } | |
2101 } | |
2102 } | |
2103 } | |
2104 return position | |
2105 } | |
2106 | |
2107 fun splitBarSet(splitbar: ConstraintLayout, position: Float) { | |
2108 waitOnUiThread { | |
2109 val topleft: View? = splitbar.getChildAt(0) | |
2110 val bottomright: View? = splitbar.getChildAt(1) | |
2111 | |
2112 if(splitbar.width > 0 && splitbar.height > 0) { | |
2113 val constraintSet = ConstraintSet() | |
2114 constraintSet.clone(splitbar) | |
2115 if (topleft != null) { | |
2116 if (splitbar.width == topleft.width) { | |
2117 constraintSet.constrainPercentHeight(topleft.id, position / 100.0F) | |
2118 } else { | |
2119 constraintSet.constrainPercentWidth(topleft.id, position / 100.0F) | |
2120 } | |
2121 } | |
2122 if (bottomright != null) { | |
2123 val altper: Float = (100.0F - position) / 100.0F | |
2124 if (splitbar.width == bottomright.width) { | |
2125 constraintSet.constrainPercentHeight(bottomright.id, altper) | |
2126 } else { | |
2127 constraintSet.constrainPercentWidth(bottomright.id, altper) | |
2128 } | |
2129 } | |
2130 constraintSet.applyTo(splitbar) | |
1975 } | 2131 } |
1976 } | 2132 } |
1977 } | 2133 } |
1978 | 2134 |
1979 fun sliderNew(vertical: Int, increments: Int, cid: Int): SeekBar? | 2135 fun sliderNew(vertical: Int, increments: Int, cid: Int): SeekBar? |