Android Custom View Instance

Source: Internet
Author: User
<span id="Label3"></p><p><p>android-related Custom View Basics can refer to Android view custom properties, This blog blogger and everyone to practice the Android custom view, we know that in the application of the most common is titlebar, they are consistent in form, generally, the left fallback button, the middle description text, the right function Button. So it is very suitable to extract as a custom view template, nonsense less, directly on the Dry.</p></p>Custom View-attrs<pre class="prettyprint"><code class="language-java hljs "><?xml version=<span class="hljs-string"><span class="hljs-string">"1.0"</span></span>encoding=<span class="hljs-string"><span class="hljs-string">"utf-8"</span></span>?><resources> <declare-styleable name=<span class="hljs-string"><span class="hljs-string">"titlebarcustom"</span></span>> <attr name=<span class="hljs-string"><span class="hljs-string">"center_text"</span></span>format=<span class="hljs-string"><span class="hljs-string">"string"</span></span>/> <attr name=<span class="hljs-string"><span class="hljs-string">"center_size"</span></span>format=<span class="hljs-string"><span class="hljs-string">"dimension"</span></span>/> <attr name=<span class="hljs-string"><span class="hljs-string">"center_color"</span></span>format=<span class="hljs-string"><span class="hljs-string">"color"</span></span>/> <attr name=<span class="hljs-string"><span class="hljs-string">"center_ground"</span></span>format=<span class="hljs-string"><span class="hljs-string">"reference|color"</span></span>/> <attr name=<span class="hljs-string"><span class="hljs-string">"left_text"</span></span>format=<span class="hljs-string"><span class="hljs-string">"string"</span></span>/> <attr name=<span class="hljs-string"><span class="hljs-string">"left_size"</span></span>format=<span class="hljs-string"><span class="hljs-string">"dimension"</span></span>/> <attr name=<span class="hljs-string"><span class="hljs-string">"left_color"</span></span>format=<span class="hljs-string"><span class="hljs-string">"color"</span></span>/> <attr name=<span class="hljs-string"><span class="hljs-string">"left_ground"</span></span>format=<span class="hljs-string"><span class="hljs-string">"reference|color"</span></span>/> <attr name=<span class="hljs-string"><span class="hljs-string">"right_text"</span></span>format=<span class="hljs-string"><span class="hljs-string">"string"</span></span>/> <attr name=<span class="hljs-string"><span class="hljs-string">"right_size"</span></span>format=<span class="hljs-string"><span class="hljs-string">"dimension"</span></span>/> <attr name=<span class="hljs-string"><span class="hljs-string">"right_color"</span></span>format=<span class="hljs-string"><span class="hljs-string">"color"</span></span>/> <attr name=<span class="hljs-string"><span class="hljs-string">"right_ground"</span></span>format=<span class="hljs-string"><span class="hljs-string">"reference|color"</span></span>/> </declare-styleable></resources></code></pre>Custom View class<pre class="prettyprint"><code class="language-java hljs "><span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>android.content.Context;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>android.content.res.TypedArray;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>android.graphics.drawable.Drawable;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>android.util.AttributeSet;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>android.view.View;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>android.widget.Button;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>android.widget.LinearLayout;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>android.widget.RelativeLayout;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>android.widget.TextView;<span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-class"><span class="hljs-class"> <span class="hljs-keyword">class</span> <span class="hljs-title">titlebar</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">relativelayout</span>{</span></span> <span class="hljs-keyword"><span class="hljs-keyword">Private</span></span>Button mrightbutton, mleftbutton;<span class="hljs-keyword"><span class="hljs-keyword">Private</span></span>TextView mcentertextview;<span class="hljs-keyword"><span class="hljs-keyword">Private</span></span> <span class="hljs-keyword"><span class="hljs-keyword">int</span></span>mcentercolor, mrightcolor, mleftcolor;<span class="hljs-keyword"><span class="hljs-keyword">Private</span></span>drawable mcenterbackground, mrightbackground, mleftbackground;<span class="hljs-keyword"><span class="hljs-keyword">Private</span></span> <span class="hljs-keyword"><span class="hljs-keyword">float</span></span>mcentersize, mrightsize, mleftsize;<span class="hljs-keyword"><span class="hljs-keyword">Private</span></span>String mcentertext, mrighttext, mlefttext;<span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-keyword"><span class="hljs-keyword">void</span></span> <span class="hljs-title"><span class="hljs-title">Setontitlebarclicklistener</span></span>(ontitlebarclicklistener Montitlebarclicklistener) {<span class="hljs-keyword"><span class="hljs-keyword"></span> this</span>. Montitlebarclicklistener = montitlebarclicklistener; }<span class="hljs-keyword"><span class="hljs-keyword">Private</span></span>Ontitlebarclicklistener montitlebarclicklistener;<span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-title"><span class="hljs-title">titlebar</span></span>(context context, AttributeSet Attrs) {<span class="hljs-keyword"><span class="hljs-keyword">Super</span></span>(context, attrs);<span class="hljs-keyword"><span class="hljs-keyword">Final</span></span>TypedArray a = context.obtainstyledattributes (attrs, r.styleable.titlebarcustom);<span class="hljs-keyword"><span class="hljs-keyword">Final</span></span> <span class="hljs-keyword"><span class="hljs-keyword">int</span></span>N = A.getindexcount ();<span class="hljs-keyword"><span class="hljs-keyword"></span> for</span>(<span class="hljs-keyword"><span class="hljs-keyword">int</span></span>i =<span class="hljs-number"><span class="hljs-number">0</span></span>; I < N; I++) {<span class="hljs-keyword"><span class="hljs-keyword">int</span></span>attr = A.getindex (i);<span class="hljs-keyword"><span class="hljs-keyword">Switch</span></span>(attr) {<span class="hljs-keyword"><span class="hljs-keyword"></span> case</span>R.styleable.titlebarcustom_center_color:mcentercolor = A.getcolor (attr,-<span class="hljs-number"><span class="hljs-number">1</span></span>);<span class="hljs-keyword"><span class="hljs-keyword"></span> break</span>;<span class="hljs-keyword"><span class="hljs-keyword"></span> case</span>R.styleable.titlebarcustom_center_size:mcentersize = A.getdimension (attr,<span class="hljs-number"><span class="hljs-number">0</span></span>);<span class="hljs-keyword"><span class="hljs-keyword"></span> break</span>;<span class="hljs-keyword"><span class="hljs-keyword"></span> case</span>R.styleable.titlebarcustom_center_text:mcentertext = a.getstring (attr);<span class="hljs-keyword"><span class="hljs-keyword"></span> break</span>;<span class="hljs-keyword"><span class="hljs-keyword"></span> case</span>R.styleable.titlebarcustom_center_ground:mcenterbackground = a.getdrawable (attr);<span class="hljs-keyword"><span class="hljs-keyword"></span> break</span>;<span class="hljs-keyword"><span class="hljs-keyword"></span> case</span>R.styleable.titlebarcustom_left_color:mleftcolor = A.getcolor (attr,-<span class="hljs-number"><span class="hljs-number">1</span></span>);<span class="hljs-keyword"><span class="hljs-keyword"></span> break</span>;<span class="hljs-keyword"><span class="hljs-keyword"></span> case</span>R.styleable.titlebarcustom_left_size:mleftsize = A.getdimension (attr,<span class="hljs-number"><span class="hljs-number">0</span></span>);<span class="hljs-keyword"><span class="hljs-keyword"></span> break</span>;<span class="hljs-keyword"><span class="hljs-keyword"></span> case</span>R.styleable.titlebarcustom_left_text:mlefttext = a.getstring (attr);<span class="hljs-keyword"><span class="hljs-keyword"></span> break</span>;<span class="hljs-keyword"><span class="hljs-keyword"></span> case</span>R.styleable.titlebarcustom_left_ground:mleftbackground = a.getdrawable (attr);<span class="hljs-keyword"><span class="hljs-keyword"></span> break</span>;<span class="hljs-keyword"><span class="hljs-keyword"></span> case</span>R.styleable.titlebarcustom_right_color:mrightcolor = A.getcolor (attr,-<span class="hljs-number"><span class="hljs-number">1</span></span>);<span class="hljs-keyword"><span class="hljs-keyword"></span> break</span>;<span class="hljs-keyword"><span class="hljs-keyword"></span> case</span>R.styleable.titlebarcustom_right_size:mrightsize = A.getdimension (attr,<span class="hljs-number"><span class="hljs-number">0</span></span>);<span class="hljs-keyword"><span class="hljs-keyword"></span> break</span>;<span class="hljs-keyword"><span class="hljs-keyword"></span> case</span>R.styleable.titlebarcustom_right_text:mrighttext = a.getstring (attr);<span class="hljs-keyword"><span class="hljs-keyword"></span> break</span>;<span class="hljs-keyword"><span class="hljs-keyword"></span> case</span>R.styleable.titlebarcustom_right_ground:mrightbackground = a.getdrawable (attr);<span class="hljs-keyword"><span class="hljs-keyword"></span> break</span>; }} Mrightbutton =<span class="hljs-keyword"><span class="hljs-keyword">New</span></span>Button (context); Mrightbutton.settext (mrighttext); Mrightbutton.settextsize (mrightsize); Mrightbutton.settextcolor (mrightcolor); Mrightbutton.setbackgrounddrawable (mrightbackground); Relativelayout.layoutparams Rightparams =<span class="hljs-keyword"><span class="hljs-keyword">New</span></span>Relativelayout.layoutparams (layoutparams.wrap_content, LinearLayout.LayoutParams.WRAP_CONTENT); Rightparams.addrule (align_parent_right, TRUE); Rightparams.addrule (center_vertical, TRUE); Rightparams.setmargins (<span class="hljs-number"><span class="hljs-number">0</span></span>,<span class="hljs-number"><span class="hljs-number">0</span></span>,<span class="hljs-number"><span class="hljs-number">Ten</span></span>,<span class="hljs-number"><span class="hljs-number">0</span></span>); Mrightbutton.setlayoutparams (rightparams); AddView (mrightbutton); Mrightbutton.setonclicklistener (<span class="hljs-keyword"><span class="hljs-keyword">New</span></span>Onclicklistener () {<span class="hljs-annotation"><span class="hljs-annotation">@Override</span></span> <span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-keyword"><span class="hljs-keyword">void</span></span> <span class="hljs-title"><span class="hljs-title">OnClick</span></span>(View V) {<span class="hljs-keyword"><span class="hljs-keyword">if</span></span>(montitlebarclicklistener! =<span class="hljs-keyword"><span class="hljs-keyword">NULL</span></span>) {montitlebarclicklistener.rightbuttonclick (); } } }); Mleftbutton =<span class="hljs-keyword"><span class="hljs-keyword">New</span></span>Button (context); Mleftbutton.settext (mlefttext); Mleftbutton.settextsize (mleftsize); Mleftbutton.settextcolor (mleftcolor); Mleftbutton.setbackgrounddrawable (mleftbackground); Relativelayout.layoutparams Leftparams =<span class="hljs-keyword"><span class="hljs-keyword">New</span></span>Relativelayout.layoutparams (layoutparams.wrap_content, LinearLayout.LayoutParams.WRAP_CONTENT); Leftparams.addrule (align_parent_left, TRUE); Leftparams.addrule (center_vertical, TRUE); Leftparams.setmargins (<span class="hljs-number"><span class="hljs-number">Ten</span></span>,<span class="hljs-number"><span class="hljs-number">0</span></span>,<span class="hljs-number"><span class="hljs-number">0</span></span>,<span class="hljs-number"><span class="hljs-number">0</span></span>); Mleftbutton.setlayoutparams (leftparams); AddView (mleftbutton); Mleftbutton.setonclicklistener (<span class="hljs-keyword"><span class="hljs-keyword">New</span></span>Onclicklistener () {<span class="hljs-annotation"><span class="hljs-annotation">@Override</span></span> <span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-keyword"><span class="hljs-keyword">void</span></span> <span class="hljs-title"><span class="hljs-title">OnClick</span></span>(View V) {<span class="hljs-keyword"><span class="hljs-keyword">if</span></span>(montitlebarclicklistener! =<span class="hljs-keyword"><span class="hljs-keyword">NULL</span></span>) {montitlebarclicklistener.leftbuttonclick (); } } }); Mcentertextview =<span class="hljs-keyword"><span class="hljs-keyword">New</span></span>TextView (context); Mcentertextview.settext (mcentertext); Mcentertextview.settextsize (mcentersize); Mcentertextview.settextcolor (mcentercolor); Mcentertextview.setbackgrounddrawable (mcenterbackground); Relativelayout.layoutparams Centerparams =<span class="hljs-keyword"><span class="hljs-keyword">New</span></span>Relativelayout.layoutparams (layoutparams.wrap_content, LinearLayout.LayoutParams.WRAP_CONTENT); Centerparams.addrule (center_in_parent, TRUE); Leftparams.setmargins (<span class="hljs-number"><span class="hljs-number">Ten</span></span>,<span class="hljs-number"><span class="hljs-number">0</span></span>,<span class="hljs-number"><span class="hljs-number">Ten</span></span>,<span class="hljs-number"><span class="hljs-number">0</span></span>); Mcentertextview.setlayoutparams (centerparams); AddView (mcentertextview); A.recycle (); }<span class="hljs-annotation"><span class="hljs-annotation">@SuppressWarnings</span></span>(<span class="hljs-string"><span class="hljs-string">"unused"</span></span>)<span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-keyword"><span class="hljs-keyword">void</span></span> <span class="hljs-title"><span class="hljs-title">setrightbuttonvisiablity</span></span>(<span class="hljs-keyword"><span class="hljs-keyword">Boolean</span></span>Isvisiable) {<span class="hljs-keyword"><span class="hljs-keyword">if</span></span>(mrightbutton = =<span class="hljs-keyword"><span class="hljs-keyword">NULL</span></span>)<span class="hljs-keyword"><span class="hljs-keyword">return</span></span>;<span class="hljs-keyword"><span class="hljs-keyword">if</span></span>(isvisiable) {mrightbutton.setvisibility (view.visible); }<span class="hljs-keyword"><span class="hljs-keyword">Else</span></span>{mrightbutton.setvisibility (view.gone); } }<span class="hljs-annotation"><span class="hljs-annotation">@SuppressWarnings</span></span>(<span class="hljs-string"><span class="hljs-string">"unused"</span></span>)<span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-keyword"><span class="hljs-keyword">void</span></span> <span class="hljs-title"><span class="hljs-title">setleftbuttonvisiablity</span></span>(<span class="hljs-keyword"><span class="hljs-keyword">Boolean</span></span>Isvisiable) {<span class="hljs-keyword"><span class="hljs-keyword">if</span></span>(mleftbutton = =<span class="hljs-keyword"><span class="hljs-keyword">NULL</span></span>)<span class="hljs-keyword"><span class="hljs-keyword">return</span></span>;<span class="hljs-keyword"><span class="hljs-keyword">if</span></span>(isvisiable) {mleftbutton.setvisibility (view.visible); }<span class="hljs-keyword"><span class="hljs-keyword">Else</span></span>{mleftbutton.setvisibility (view.gone); } }<span class="hljs-annotation"><span class="hljs-annotation">@SuppressWarnings</span></span>(<span class="hljs-string"><span class="hljs-string">"unused"</span></span>)<span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-keyword"><span class="hljs-keyword">void</span></span> <span class="hljs-title"><span class="hljs-title">setcentertextvisiablity</span></span>(<span class="hljs-keyword"><span class="hljs-keyword">Boolean</span></span>Isvisiable) {<span class="hljs-keyword"><span class="hljs-keyword">if</span></span>(mcentertextview = =<span class="hljs-keyword"><span class="hljs-keyword">NULL</span></span>)<span class="hljs-keyword"><span class="hljs-keyword">return</span></span>;<span class="hljs-keyword"><span class="hljs-keyword">if</span></span>(isvisiable) {mcentertextview.setvisibility (view.visible); }<span class="hljs-keyword"><span class="hljs-keyword">Else</span></span>{mcentertextview.setvisibility (view.gone); } }<span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-class"><span class="hljs-class"> <span class="hljs-keyword">interface</span> <span class="hljs-title">ontitlebarclicklistener</span> {</span></span> <span class="hljs-keyword"><span class="hljs-keyword">void</span></span>Leftbuttonclick ();<span class="hljs-keyword"><span class="hljs-keyword">void</span></span>Rightbuttonclick (); }}</code></pre>Using a custom view<p><p>first, define in the UI</p></p><pre class="prettyprint"><code class="language-xml hljs "><span class="hljs-pi"><span class="hljs-pi"><?xml version= "1.0" encoding= "utf-8"?></span></span><span class="hljs-tag"><span class="hljs-tag"><<span class="hljs-title">linearlayout</span> <span class="hljs-attribute">xmlns:android</span>=<span class="hljs-value">"http://schemas.android.com/apk/res/android"</span> <span class="hljs-attribute"> Xmlns:linroid</span>= "<span class="hljs-value">http://schemas.android.com/apk/res-auto"</span><span class="hljs-attribute">android:orientation</span>=<span class="hljs-value">" Vertical "</span><span class="hljs-attribute">android:layout_width</span>="<span class="hljs-value">match_parent "</span><span class="hljs-attribute">android:layout_height</span>=<span class="hljs-value">" Match_parent "</span>> </span></span> <span class="hljs-tag"><<span class="hljs-title"><span class="hljs-title">Studio.neulion.com.tasktest.TitleBar</span></span> <span class="hljs-attribute"><span class="hljs-attribute">Android:layout_width</span></span>=<span class="hljs-value"><span class="hljs-value">"match_parent"</span></span> <span class="hljs-attribute"><span class="hljs-attribute">Android:layout_height</span></span>=<span class="hljs-value"><span class="hljs-value">"60dp"</span></span> <span class="hljs-attribute"><span class="hljs-attribute">Linroid:center_color</span></span>=<span class="hljs-value"><span class="hljs-value">"#FF0000"</span></span> <span class="hljs-attribute"><span class="hljs-attribute">Linroid:center_text</span></span>=<span class="hljs-value"><span class="hljs-value">"this is Title"</span></span> <span class="hljs-attribute"><span class="hljs-attribute">linroid:center_size</span></span>=<span class="hljs-value"><span class="hljs-value">"12dp"</span></span> <span class="hljs-attribute"><span class="hljs-attribute">Linroid:center_ground</span></span>=<span class="hljs-value"><span class="hljs-value">"#00FF00"</span></span> <span class="hljs-attribute"><span class="hljs-attribute">Linroid:right_color</span></span>=<span class="hljs-value"><span class="hljs-value">"#00FF00"</span></span> <span class="hljs-attribute"><span class="hljs-attribute">Linroid:right_text</span></span>=<span class="hljs-value"><span class="hljs-value">"click"</span></span> <span class="hljs-attribute"><span class="hljs-attribute">linroid:right_size</span></span>=<span class="hljs-value"><span class="hljs-value">"10dp"</span></span> <span class="hljs-attribute"><span class="hljs-attribute">Linroid:right_ground</span></span>=<span class="hljs-value"><span class="hljs-value">"#0000FF"</span></span> <span class="hljs-attribute"><span class="hljs-attribute">Linroid:left_color</span></span>=<span class="hljs-value"><span class="hljs-value">"#0000FF"</span></span> <span class="hljs-attribute"><span class="hljs-attribute">Linroid:left_text</span></span>=<span class="hljs-value"><span class="hljs-value">"back"</span></span> <span class="hljs-attribute"><span class="hljs-attribute">linroid:left_size</span></span>=<span class="hljs-value"><span class="hljs-value">"10dp"</span></span> <span class="hljs-attribute"><span class="hljs-attribute">Linroid:left_ground</span></span>=<span class="hljs-value"><span class="hljs-value">"#FF0000"</span></span> <span class="hljs-attribute"><span class="hljs-attribute">Android:id</span></span>=<span class="hljs-value"><span class="hljs-value">"@+id/title_bar"</span></span>/></span><span class="hljs-tag"><span class="hljs-tag"></<span class="hljs-title">linearlayout</span>></span></span></code></pre><p><p>And then use it in your Code.</p></p><pre class="prettyprint"><code class="language-java hljs "><span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-class"><span class="hljs-class"> <span class="hljs-keyword">class</span> <span class="hljs-title">sixactivity</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Activity</span>{</span></span> <span class="hljs-annotation"><span class="hljs-annotation">@Override</span></span> <span class="hljs-keyword"><span class="hljs-keyword">protected</span></span> <span class="hljs-keyword"><span class="hljs-keyword">void</span></span> <span class="hljs-title"><span class="hljs-title">onCreate</span></span>(Bundle Savedinstancestate) {<span class="hljs-keyword"><span class="hljs-keyword">Super</span></span>. onCreate (savedinstancestate); Setcontentview (r.layout.activity_title); Initview (); }<span class="hljs-keyword"><span class="hljs-keyword">Private</span></span> <span class="hljs-keyword"><span class="hljs-keyword">void</span></span> <span class="hljs-title"><span class="hljs-title">Initview</span></span>() {<span class="hljs-keyword"><span class="hljs-keyword">Final</span></span>TitleBar titlebar = (titlebar) Findviewbyid (r.id.title_bar);<span class="hljs-keyword"><span class="hljs-keyword">if</span></span>(titlebar! =<span class="hljs-keyword"><span class="hljs-keyword">NULL</span></span>) {titlebar.setontitlebarclicklistener (<span class="hljs-keyword"><span class="hljs-keyword">New</span></span>Ontitlebarclicklistener () {<span class="hljs-annotation"><span class="hljs-annotation">@Override</span></span> <span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-keyword"><span class="hljs-keyword">void</span></span> <span class="hljs-title"><span class="hljs-title">Leftbuttonclick</span></span>() {toast.maketext (sixactivity.<span class="hljs-keyword"><span class="hljs-keyword"></span> this</span>,<span class="hljs-string"><span class="hljs-string">"left button click!"</span></span>, toast.length_long). show (); }<span class="hljs-annotation"><span class="hljs-annotation">@Override</span></span> <span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-keyword"><span class="hljs-keyword">void</span></span> <span class="hljs-title"><span class="hljs-title">Rightbuttonclick</span></span>() {toast.maketext (sixactivity.<span class="hljs-keyword"><span class="hljs-keyword"></span> this</span>,<span class="hljs-string"><span class="hljs-string">"right button click!"</span></span>, toast.length_long). show (); } }); } }}</code></pre><p><p>This completes the entire titlebar custom view, although very coarse, but the basic model has come out, this is a typical combination of custom view example, other custom view follow-up Update.</p></p> <p><p>Android Custom View Instance</p></p></span>

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.