This repository has been archived by the owner on May 1, 2024. It is now read-only.
/
Activity1.cs
176 lines (140 loc) · 5.55 KB
/
Activity1.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
using System;
using System.Diagnostics;
using System.Globalization;
using Android.App;
using Android.Content.PM;
using Android.OS;
using Android.Widget;
using Java.Interop;
using Xamarin.Forms;
using Xamarin.Forms.ControlGallery.Android;
using Xamarin.Forms.Controls;
using Xamarin.Forms.Controls.Issues;
using Xamarin.Forms.Platform.Android;
using Xamarin.Forms.Platform.Android.AppLinks;
using Android.Content;
using Android.Content.Res;
using Android.Views;
using AColor = Android.Graphics.Color;
[assembly: Dependency (typeof (CacheService))]
[assembly: Dependency (typeof (TestCloudService))]
[assembly: ExportRenderer (typeof (DisposePage), typeof (DisposePageRenderer))]
[assembly: ExportRenderer (typeof (DisposeLabel), typeof (DisposeLabelRenderer))]
[assembly: ExportEffect (typeof (BorderEffect), "BorderEffect")]
namespace Xamarin.Forms.ControlGallery.Android
{
public partial class Activity1
{
App _app;
void AddNativeControls (NestedNativeControlGalleryPage page)
{
if (page.NativeControlsAdded) {
return;
}
StackLayout sl = page.Layout;
// Create and add a native TextView
var textView = new TextView (this) { Text = "I am a native TextView", TextSize = 14 };
sl?.Children.Add (textView);
// Create and add a native Button
var button = new global::Android.Widget.Button (this) { Text = "Click to change TextView font size" };
float originalSize = textView.TextSize;
button.Click += (sender, args) => { textView.TextSize = textView.TextSize == originalSize ? 24 : 14; };
sl?.Children.Add (button.ToView ());
// Create a control which we know doesn't behave correctly with regard to measurement
var difficultControl0 = new BrokenNativeControl (this) {
Text = "This native control doesn't play nice with sizing, which is why it's all squished to one side."
};
var difficultControl1 = new BrokenNativeControl (this) {
Text = "Same control, but with a custom GetDesiredSize delegate to accomodate it's sizing problems."
};
// Add a misbehaving control
sl?.Children.Add (difficultControl0);
// Add a misbehaving control with a custom delegate for GetDesiredSize
sl?.Children.Add (difficultControl1, SizeBrokenControl);
page.NativeControlsAdded = true;
}
static SizeRequest? SizeBrokenControl (NativeViewWrapperRenderer renderer,
int widthConstraint, int heightConstraint)
{
global::Android.Views.View nativeView = renderer.Control;
if ((widthConstraint == 0 && heightConstraint == 0) || nativeView == null) {
return null;
}
int width = global::Android.Views.View.MeasureSpec.GetSize (widthConstraint);
int widthSpec = global::Android.Views.View.MeasureSpec.MakeMeasureSpec (width * 2,
global::Android.Views.View.MeasureSpec.GetMode (widthConstraint));
nativeView.Measure (widthSpec, heightConstraint);
var size = new Size (nativeView.MeasuredWidth, nativeView.MeasuredHeight);
return new SizeRequest (size);
}
void AddNativeBindings(NativeBindingGalleryPage page)
{
if (page.NativeControlsAdded)
return;
StackLayout sl = page.Layout;
var textView = new TextView(this)
{
TextSize = 14,
Text = "This will be text"
};
var viewGroup = new LinearLayout(this);
viewGroup.AddView(textView);
var buttonColor = new global::Android.Widget.Button(this) { Text = "Change label Color" };
buttonColor.Click += (sender, e) => textView.SetTextColor(Color.Blue.ToAndroid());
var colorPicker = new ColorPickerView(this, 200, 200);
textView.SetBinding(nameof(textView.Text), new Binding("NativeLabel"));
//this doesn't work because there's not TextColor property
//textView.SetBinding("TextColor", new Binding("NativeLabelColor", converter: new ColorConverter()));
colorPicker.SetBinding(nameof(colorPicker.SelectedColor), new Binding("NativeLabelColor", BindingMode.TwoWay, new ColorConverter()), "ColorPicked");
sl?.Children.Add(viewGroup);
sl?.Children.Add(buttonColor.ToView());
sl?.Children.Add(colorPicker);
page.NativeControlsAdded = true;
}
public class ColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is Color)
return ((Color)value).ToAndroid();
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is global::Android.Graphics.Color)
return ((global::Android.Graphics.Color)value).ToColor();
return null;
}
}
[Export("NavigateToTest")]
public bool NavigateToTest(string test)
{
return _app.NavigateToTestPage(test);
}
[Export("Reset")]
public void Reset()
{
_app.Reset();
}
void SetUpForceRestartTest()
{
// Listen for messages from the app restart test
MessagingCenter.Subscribe<RestartAppTest>(this, RestartAppTest.ForceRestart, (e) =>
{
// We can force a restart by making a configuration change; in this case, we'll enter
// Car Mode. (The easy way to do this is to change the orientation, but ControlGallery
// handles orientation changes so they don't cause a restart.)
var uiModeManager = UiModeManager.FromContext(this);
if (uiModeManager.CurrentModeType == UiMode.TypeCar)
{
// If for some reason we're already in car mode, disable it
uiModeManager.DisableCarMode(DisableCarModeFlags.None);
}
uiModeManager.EnableCarMode(EnableCarModeFlags.None);
// And put things back to normal so we can keep running tests
uiModeManager.DisableCarMode(DisableCarModeFlags.None);
((App)Xamarin.Forms.Application.Current).Reset();
});
}
}
}